首页 > 其他分享 >leetcode-350-easy

leetcode-350-easy

时间:2023-01-04 19:34:18浏览次数:46  
标签:return int leetcode length result easy 350 nums1 nums2

Intersection of Two Arrays II

Given two integer arrays nums1 and nums2, return an array of their intersection. 
Each element in the result must appear as many times as it shows in both arrays and you may return the result in any order.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2,2]
Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [4,9]
Explanation: [9,4] is also accepted.
Constraints:

1 <= nums1.length, nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 1000
Follow up:

What if the given array is already sorted? How would you optimize your algorithm?
What if nums1's size is small compared to nums2's size? Which algorithm is better?
What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

思路一:两个数组排序,对比两数组从小到大,如有相等的值,放入结果中,实现有点丑,用数组映射或者 map 会简洁一些,但是会占用额外的存储空间。

    public int[] intersect(int[] nums1, int[] nums2) {
        if (nums1.length > nums2.length) {
            return intersect(nums2, nums1);
        }

        Arrays.sort(nums1);
        Arrays.sort(nums2);

        List<Integer> result = new ArrayList<>();
        for (int i = 0, j = 0; i < nums1.length && j < nums2.length; i++, j++) {
            while (i < nums1.length && j < nums2.length && nums1[i] != nums2[j]) {
                if (nums1[i] < nums2[j]) {
                    i++;
                } else {
                    j++;
                }
            }

            if (i < nums1.length && j < nums2.length) {
                result.add(nums1[i]);
            }
        }

        return result.stream().mapToInt(i -> i).toArray();
    }

标签:return,int,leetcode,length,result,easy,350,nums1,nums2
From: https://www.cnblogs.com/iyiluo/p/17025805.html

相关文章