题目
我的思路:先排序然后进行比较,一个是i一个是j这样可以进行不断的判断控制指针
代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int min = nums1.length>nums2.length?nums1.length:nums2.length;
List<Integer> lst = new ArrayList<>();
int i = 0;
int j = 0;
int length = 0;
while (true) {
if(i >= nums1.length)
break;
if(j >= nums2.length)
break;
if(nums1[i] > nums2[j]){
j++;
continue;
}
if(nums1[i] < nums2[j]){
i++;
continue;
}
if(length == 0){
lst.add(nums1[i]);
length ++;
j++;
i++;
}else {
if(lst.get(lst.size()-1) == nums1[i]){
i++;
j++;
}else {
lst.add(nums1[i]);
i++;
j++;
}
}
}
int []s = new int[lst.size()];
int jx = 0;
while (!lst.isEmpty()) {
s[jx++] = lst.get(0);
lst.remove(0);
//jx++;
}
return s;
}
}
排名靠前的代码
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
// 求出数组nums1中最大值 与最小值
for (int i = 0; i < nums1.length; i++) {
max = max < nums1[i] ? nums1[i] : max;
min = min > nums1[i] ? nums1[i] : min;
}
// 标记
boolean[] booleanArray = new boolean[max - min + 1];
for (int i = 0; i < nums1.length; i++) {
booleanArray[nums1[i] - min] = true;
}
int index = 0;
int[] tempArray = new int[nums2.length];
for (int i = 0; i < nums2.length; i++) {
// 找出nums2中的元素,标记改为false
if (!(nums2[i] < min) && !(nums2[i] > max) && booleanArray[nums2[i] - min]) {
booleanArray[nums2[i] - min] = false;
// 找出相同的数据
tempArray[index++] = nums2[i];
}
}
// 复制
return Arrays.copyOf(tempArray, index);
}
}