leetcode[Intersection of Two Arrays II]

来源:互联网 发布:linux内核缓冲区 编辑:程序博客网 时间:2024/06/17 20:53

[Intersection of Two Arrays]的一些解法也可以拿过来用,只不过存储结果一个用set一个用list而已

解法一:

public class Solution {    public int[] intersect(int[] nums1, int[] nums2) {        LinkedList<Integer> list = new LinkedList<>();        for(int i = 0; i < nums1.length; i++){        list.add(nums1[i]);        }        LinkedList<Integer> temp = new LinkedList<>();        for(int i = 0; i < nums2.length; i++){        if(list.contains(nums2[i])){        temp.add(nums2[i]);        //list.remove(nums2[i]);//因为要保留重复元素,原来nums1对应的list要删除这个元素        list.remove(new Integer(nums2[i]));//这里有个重载,若remove参数是int,代表下标,integer才代表对象        }        }                int[] res = new int[temp.size()];        for(int i = 0; i < res.length; i++){        res[i] = temp.get(i);        }        return res;    }}

解法二:

public class Solution {    public int[] intersect(int[] nums1, int[] nums2) {    //题目中的follow-up提到考虑内存问题,那么就将nums1的重复元素计数,用Map来存    HashMap<Integer, Integer> map = new HashMap<>();//将nums1存到map中去    for(int i = 0; i < nums1.length; i++){    if(map.containsKey(nums1[i])){    map.put(nums1[i], map.get(nums1[i]) + 1);    //System.out.println("" + nums1[i] + "  : " + (map.get(nums1[i])));    }    else{    map.put(nums1[i], 1);    }    }        LinkedList<Integer> temp = new LinkedList<>();    //开始求交集    for(int i = 0; i < nums2.length; i++){    if(map.containsKey(nums2[i])){    temp.add(nums2[i]);    if(map.get(nums2[i]) == 1){//当这个元素在map中只有一个时,移除map中的一个键值对(因为求交集移了一个就只剩0个了)    map.remove(nums2[i]);    }    else{    map.put(nums2[i], map.get(nums2[i]) - 1);//计数减一    }    }    }        int[] res = new int[temp.size()];    for(int i = 0; i < res.length; i++){    res[i] = temp.get(i);    }        return res;    }}


阅读全文
0 0
原创粉丝点击