LeetCode31--350两个数组的交集II和905按奇偶排序数组

这篇博客介绍了两种数组操作的解决方案。第一部分讲解了如何计算两个已排序数组的交集,允许结果中元素重复。通过比较并依次添加相等的元素到结果数组中实现。第二部分涉及按奇偶性对整数数组进行排序,将所有偶数放在所有奇数之前。这两个问题都提供了简洁的Java代码实现。
摘要由CSDN通过智能技术生成

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值