問題:數組
Given two arrays, write a function to compute their intersection.spa
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2]
.指針
Note:code
解決:element
①使用hashSet保存nums1數組中的值,而後比較便可。耗時5ms.rem
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
List<Integer> list = new ArrayList<>();
Set<Integer> set = new HashSet<>();
for (int n : nums1) {
set.add(n);
}
for (int n : nums2) {
if (set.contains(n)) {
list.add(n);
set.remove(n);
}
}
int res[] = new int[list.size()];
for(int i = 0;i < list.size();i ++ ){
res[i] = list.get(i);
}
return res;
}
}get
②使用雙指針法, 使用一個臨時數組保存相同的數值,當掃描時存在與臨時數組最後一個值相同的數時,跳過,不然,添加到臨時數組中。hash
public class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) return new int[0];
Arrays.sort(nums1);
Arrays.sort(nums2);
int temp[] = new int[nums1.length];
int p1 = 0;
int p2 = 0;
int p = 0;
while(p1 < nums1.length && p2 < nums2.length){
if (nums1[p1] == nums2[p2]) {
if (p - 1 >= 0 && temp[p - 1] == nums1[p1]) {//相同的值重複
//什麼都不作
}else{
temp[p] = nums1[p1];
p ++;
}
p1 ++;
p2 ++;
}else if (nums1[p1] < nums2[p2]) {
p1 ++;
}else{
p2 ++;
}
}
int res[] = new int[p];
for (int i = 0;i < p ;i ++ ) {
res[i] = temp[i];
}
return res;
}
}it