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;
    }
};

英語很差,若是發現我忽略了哪一點,請指出,謝謝!圖片

相關文章
相關標籤/搜索