1.两个数组的交集II
/给定两个数组,编写一个函数来计算它们的交集。 // // // // 示例 1: // // 输入:nums1 = [1,2,2,1], nums2 = [2,2] //输出:[2,2] // // // 示例 2: // // 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] //输出:[4,9] // // // // 说明: // // // 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。 // 我们可以不考虑输出结果的顺序。 // // // 进阶: // // // 如果给定的数组已经排好序呢?你将如何优化你的算法? // 如果 nums1 的大小比 nums2 小很多,哪种方法更优? // 如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办? // // Related Topics 排序 哈希表 双指针 二分查找
这个相比于昨天那个题更简单,因为它是可以有重复的元素出现,只需要把去掉if(num1[index1]==num2[index2])中的判断条件,不管什么样的数,只要相等都放入输出的数组中就行。
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int length1 = nums1.length, length2 = nums2.length;
int[] intersection = new int[length1 + length2];
int index = 0, index1 = 0, index2 = 0;
while(index1 < length1 && index2 < length2){
if(nums1[index1] == nums2[index2]){
intersection[index++] = nums1[index1];
index1++;
index2++;
}else if(nums1[index1] < nums2[index2]){
index1++;
}else{
index2++;
}
}
return Arrays.copyOfRange(intersection, 0, index);
}
2.按奇偶排序数组
//给定一个非负整数数组 A,返回一个数组,在该数组中, A 的所有偶数元素之后跟着所有奇数元素。 // // 你可以返回满足此条件的任何数组作为答案。 // // // // 示例: // // 输入:[3,1,2,4] //输出:[2,4,3,1] //输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。 // // // // // 提示: // // // 1 <= A.length <= 5000 // 0 <= A[i] <= 5000 // // Related Topics 数组
这个题是因为在排序中有按奇偶排序数组II所以先来做的这一题,很简单,看程序,一看便知。
public int[] sortArrayByParity(int[] A) {
int[] arr = new int[A.length];
int j = 0;
int k = A.length-1;
for (int i = 0; i < A.length; i++) {
if(A[i] % 2 == 0){
arr[j++] = A[i];
}else{
arr[k--] = A[i];
}
}
return arr;
}