题目描述
有两个数字数组a,b如b的每个元素都是a中某一个元素的平方,则返回true,否则false
例子 : a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
转化后:
a = [121, 144, 19, 161, 19, 144, 19, 11]
b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]
如果b中任何一个元素改变成一个其他数字(不符合条件的)都会返回false
常规解答
|
|
- 将a中每个元素平方,去b中寻找
- 如果b中有这个元素,则从b中删除,最后看b中是否还有元素。
- 缺点是会改变b数组的原结构。
最优解答
|
|
思路解析
- 两种方式都是排序然后一一去对应
- 第二种方式的优势是直接将数组转换成字符串,少了一次遍历。
- 还值得一提的是少了一个判断null的语句,因为最后return的时候如果是null就不会相等。
知识点
- forEach,无返回值,对数组的每个元素进行一次操作。
- sort
- map 返回一个新数组,每个元素为调用func的结果。
- every 返回一个boolean,判断是否每个元素都符合func的条件
- 数组判断相等可以sort后转换成字符串。
附一小题
将一个字符串里的所有字母取出,返回其顺序 (a - 1, z - 26)
|
|