zoukankan      html  css  js  c++  java
  • LeetCode刷题--两个数组的交集II

    题目

    代码

    方法一:HashMap法

    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
        Map<Integer,Integer> map = new HashMap<Integer,Integer>();
                List<Integer> list = new ArrayList<Integer>();
                for(int num:nums1){
                    if(map.containsKey(num)){
                        map.put(num,map.get(num)+1);
                    }else{
                        map.put(num,1);
                    }
                }
                for(int num:nums2){
                    if(map.containsKey(num)){
                        map.replace(num,map.get(num)-1);
                        if(map.get(num) == 0){
                            map.remove(num);
                        }
                        list.add(num);
                    }
                }
                int[] nums = new int[list.size()];
                for (int i = 0; i <list.size() ; i++) {
                    nums[i] = list.get(i);
                }
                return nums;
        }
    }
    

    方法二:排序指针法

    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            Arrays.sort(nums1);
            Arrays.sort(nums2);
            int index1 = 0, index2 = 0;
            int len1 = nums1.length;
            int len2 = nums2.length;
            List<Integer> list = new ArrayList<>();
            while(index1< len1 && index2 < len2){
                if(nums1[index1] == nums2[index2]){
                    list.add(nums1[index1]);
                    index1++;
                    index2++;
                }else if(nums1[index1] < nums2[index2]){
                    index1++;
                }else {
                    index2++;
                }
            }
            int[] nums = new int[list.size()];
            for (int i = 0; i <list.size() ; i++) {
                nums[i] = list.get(i);
            }
            return nums;
        }
    }
    

    解题思想

    方法一:遍历第一个数组将第一个集合的元素作为hashmap的键,该元素出现的次数作为hashmap的值;遍历第二个数组的元素并查询元素是否出现在hashmap中,如果出现一次,则将该元素添加到列表list中数组中,并将hash值-1,只到hash值减为0,就将该键删除。最后输出将list的元素添加到数组中做输出
    方法二:先将两个数组排序,设置两个指针index1和index2,比较两个指针指向的元素,如果相等将该元素添加到列表list中,两个指针自增,否则指针指向元素值小的那个指针自加,值大的不变。直到指针指向元素较少的数组的最后一个元素。

    举例说明

  • 相关阅读:
    浅析Python闭包
    1、Spring framework IOC容器
    springcloud 返回流案例
    foreach使用场景
    Iterator遍历集合时不可以删除集合中的元素问题
    Spring整合MyBatis配置
    Mybatis案例配置
    interrupt() interrupted() isInterruped() 区别
    4.对象关系 Map(ORM)数据访问
    3.使用 JDBC 进行数据访问
  • 原文地址:https://www.cnblogs.com/sinlearn/p/13423185.html
Copyright © 2011-2022 走看看