zoukankan      html  css  js  c++  java
  • 数组交集

    题目:

    给定两个数组,编写一个函数来计算它们的交集。

    示例 1:

    输入: nums1 = [1,2,2,1], nums2 = [2,2]
    输出: [2,2]

    示例 2:

    输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
    输出: [4,9]

    说明:

        输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。
        我们可以不考虑输出结果的顺序。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    分析:

    这道题目比较容易想到暴力解法,嵌套循环跑起来,干就完事了。但是,既然是在学习算法,还是尽量做一下优化比较好。我的思路就是先将数组从小到大排序,然后从前往后遍历,如果发现两个数组中有相同的值,那么添加进结果集,并且记录当前值的下标,下一次循环时,就没必要从下标0开始遍历了,因为数组现在已经是有序的了,所以,可以利用记录下标的方式减少一些判断。排序算法本来是想手动实现,但是考虑到这方面学习的不多,最终决定使用Arrays.sort()方法进行排序。

    代码:

    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            if (nums1.length == 0 | nums1 == null | nums2.length == 0 | nums2 == null) {
                return new int[0];
            }
            Arrays.sort(nums1);
            Arrays.sort(nums2);
            int[] shortArr ,longArr;
            if (nums1.length >= nums2.length) {
                longArr = nums1;
                shortArr = nums2;
            } else {
                shortArr = nums1;
                longArr = nums2;
            }
            int currInt = 0;
            int curr = 0;
            List<Integer> res = new ArrayList<>();
            for (int i = 0; i < shortArr.length; i++) {
                currInt = shortArr[i];
                for (int j = curr; j < longArr.length; j++) {
                    if (longArr[j] == shortArr[i]) {
                        curr = j + 1;
                        res.add(shortArr[i]);
                        break;
                    }
                }
            }
            int[] result = new int[res.size()];
            for (int i = 0; i < res.size(); i++) {
                result[i] = res.get(i);
            }
            return result;
        }
    }
  • 相关阅读:
    Android 课程设计
    第十个作业 简易通讯录
    第九个作业 QQ的账号密码保存
    第八个作业 QQ账号的保存
    第七个作业 Activity之间的数据回传
    第六个作业 应用列表
    第五个作业 背景换色
    JSP第一次作业
    安卓课设
    Android第八次作业
  • 原文地址:https://www.cnblogs.com/wxdmw/p/13291716.html
Copyright © 2011-2022 走看看