Codewars 解题报告:Are they the “same“?

Codewars 解题报告:Are they the “same”?

题目内容

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

个人解决方案

#include <vector>

class Same {
public :
    static bool comp(std::vector<int>&a, std::vector<int>&b) {
      if ((0 == a.size() ^ 0 == b.size()))
        return false;
      if (a.size() != b.size())
        return false;
      for (int& i : a)
        i *= i;
      sort(a.begin(), a.end());
      sort(b.begin(), b.end());
      int n = (int)a.size();
      for (int i = 0; i < n; ++i)
        if (a[i] != b[i])
          return false;
      return true;
    }
};

心得

这题是真的,有点迷一开始。我陷入了一个误区,由于下面这句话:java

comp(a,b) returns false because in b 132 is not the square of any number of a.数组

说的是:“132不是数组a中任意一个元素的平方”。那么,反过来,是否是a中任意一个元素,它的平方不在b中就返回false了呢?为了实现这一点,我用set存储了数组a和b的元素,毕竟重复的元素是没有比较的意义的!ide

这就是一个误区,可是从题目中看不到这个误区!我也是参考了别人的解决方案,好比:code

import java.util.Arrays;

public class AreSame {
  public static boolean comp(final int[] a, final int[] b) {
    return a != null && b != null && a.length == b.length && Arrays.equals(Arrays.stream(a).map(i -> i * i).sorted().toArray(), Arrays.stream(b).sorted().toArray());
  }
}

我就开始纳闷, 多是我忽略了重复。难道在数组b中找到一个元素是a中某一个元素的平方后,这俩数就不能够再使用了吗???可是谁叫人家是对的,我就把个人代码改为了:blog

#include <vector>

class Same {
public :
    static bool comp(std::vector<int>&a, std::vector<int>&b) {
      if ((0 == a.size() ^ 0 == b.size()))
        return false;
      if (a.size() != b.size())
        return false;
      for (int& i : a)
        i *= i;
      sort(a.begin(), a.end());
      sort(b.begin(), b.end());
      int n = (int)a.size();
      for (int i = 0; i < n; ++i)
        if (a[i] != b[i])
          return false;
      return true;
    }
};

英语很差,若是发现我忽略了哪一点,请指出,谢谢!图片

相关文章
相关标签/搜索