給定兩個數組,寫一個方法來計算它們的交集。算法
例如:
給定 nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, 返回 [2, 2]
.數組
注意:spa
思路:code
1,先排序排序
2,定義第二個數組的循環節點,爲了匹配重複數據循環
3,雙循環排序方法
代碼:數據
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int stag = 0;
int stag1 = 0;
for (int i = 0; i <nums1.length ; i++) {
for (int j = stag; j <nums2.length ; j++) {
if(nums1[i] == nums2[j]){
stag = j+1;
nums1[stag1] = nums1[i];
stag1++;
break;
}
}
}
int[] nums3 = new int[stag1];
System.arraycopy(nums1,0,nums3,0,stag1);
return nums3;
}
別人好的算法:
public int[] intersect(int[] nums1, int[] nums2) { Arrays.sort(nums1); Arrays.sort(nums2); int[] s = nums1.length<nums2.length?nums1:nums2; int[] l = nums1.length<nums2.length?nums2:nums1; int[] a = new int[s.length]; int k = 0; int i = 0; int j = 0; while (i<s.length&&j<l.length) { if(s[i]<l[j]) { i++; }else if(s[i]>l[j]) { j++; }else { a[k] = s[i]; i++; j++; k++; } } int[] r = new int[k]; System.arraycopy(a, 0, r, 0, k); return r;}又是很長的時間,真是頭疼。感受太浪費時間了。