leetcode 349. Intersection of Two Arrays
来源:互联网 发布:人工智能与信贷的结合 编辑:程序博客网 时间:2024/05/21 05:24
Given two arrays, write a function to compute their intersection.
Example:
Given nums1 = [1, 2, 2, 1]
, nums2 = [2, 2]
, return [2]
.
Note:
- Each element in the result must be unique.
- The result can be in any order.
我的想法就是map,为什么需要两个map呢?第一个map很好理解,存入nums中出现的数字,而map2则用来记录结果数组中出现的数字,确保结果数组中的数字是独一无二的。
package leetcode;import java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;public class Intersection_of_Two_Arrays_349 {public int[] intersection(int[] nums1, int[] nums2) {if(nums1.length==0||nums2.length==0){return new int[]{};}int size=0;ArrayList<Integer> result=new ArrayList<Integer>();HashMap<Integer, Integer> map1=new HashMap<Integer, Integer>();HashMap<Integer, Integer> map2=new HashMap<Integer, Integer>();//map2的存在是防止result中的值不唯一for(int i=0;i<nums1.length;i++){if(map1.get(nums1[i])==null){map1.put(nums1[i], 0);//map的value随便取值}}for(int i=0;i<nums2.length;i++){if(map2.get(nums2[i])!=null){continue;}if(map1.get(nums2[i])!=null){size++;result.add(nums2[i]);map2.put(nums2[i], 0);}}int[] theResult=new int[size];for(int i=0;i<size;i++){theResult[i]=result.get(i);}return theResult;}public static void main(String[] args) {// TODO Auto-generated method stubIntersection_of_Two_Arrays_349 i=new Intersection_of_Two_Arrays_349();int[] nums1=new int[]{1,2,2,1};int[] nums2=new int[]{2,2};System.out.println(Arrays.toString(i.intersection(nums1, nums2)));}}
大神思路跟我差不多,不过用的是hashset,时间复杂度也是O(m+n).
HashSet<Integer> set = new HashSet<Integer>(); ArrayList<Integer> res = new ArrayList<Integer>(); //Add all elements to set from array 1 for(int i =0; i< nums1.length; i++) set.add(nums1[i]); for(int j = 0; j < nums2.length; j++) { // If present in array 2 then add to res and remove from set if(set.contains(nums2[j])) { res.add(nums2[j]); set.remove(nums2[j]); } } // Convert ArrayList to array int[] arr = new int[res.size()]; for (int i= 0; i < res.size(); i++) arr[i] = res.get(i); return arr;所以hashset和hashmap的区别到底是什么呢?可以看我下一篇文章http://blog.csdn.net/huanghanqian/article/details/73920394。
还有时间复杂度不如我俩解法的其他解法,放在下面看一看,拓宽一下思路。
Sort both arrays, use two pointers
Time complexity: O(nlogn)
public class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<>(); Arrays.sort(nums1); Arrays.sort(nums2); int i = 0; int j = 0; while (i < nums1.length && j < nums2.length) { if (nums1[i] < nums2[j]) { i++; } else if (nums1[i] > nums2[j]) { j++; } else { set.add(nums1[i]); i++; j++; } } int[] result = new int[set.size()]; int k = 0; for (Integer num : set) { result[k++] = num; } return result; }}Binary search
Time complexity: O(nlogn)
public class Solution { public int[] intersection(int[] nums1, int[] nums2) { Set<Integer> set = new HashSet<>(); Arrays.sort(nums2); for (Integer num : nums1) { if (binarySearch(nums2, num)) { set.add(num); } } int i = 0; int[] result = new int[set.size()]; for (Integer num : set) { result[i++] = num; } return result; } public boolean binarySearch(int[] nums, int target) { int low = 0; int high = nums.length - 1; while (low <= high) { int mid = low + (high - low) / 2; if (nums[mid] == target) { return true; } if (nums[mid] > target) { high = mid - 1; } else { low = mid + 1; } } return false; }}
阅读全文
0 0
- leetcode 记录 349. Intersection of Two Arrays
- 349.[Leetcode]Intersection of Two Arrays
- [leetcode] 349. Intersection of Two Arrays
- Leetcode Everyday: 349. Intersection of Two Arrays
- leetcode.349. Intersection of Two Arrays
- LeetCode 349. Intersection of Two Arrays
- Leetcode 349. Intersection of Two Arrays
- leetcode 349. Intersection of Two Arrays
- leetcode 349. Intersection of Two Arrays
- LeetCode 349. Intersection of Two Arrays
- 【leetcode】 349. Intersection of Two Arrays
- Leetcode 349. Intersection of Two Arrays
- LeetCode 349. Intersection of Two Arrays
- Leetcode题解 349. Intersection of Two Arrays
- LeetCode - 349. Intersection of Two Arrays
- [Leetcode]349. Intersection of Two Arrays
- 349. Intersection of Two Arrays--LeetCode Record
- LeetCode 349. Intersection of Two Arrays
- ajax请求会有时间过程
- React Modal 的一种粗暴实现
- 多target项目
- 一个存储对象的数组要注意的地方: 存储的对象不要空指针异常了
- SSL/TLS 运行原理
- leetcode 349. Intersection of Two Arrays
- C# 为什么要重写了object类的ToString()方法
- 常见端口号及其分类
- 南阳理工2解题报告(括号配对问题)
- Shiro-分布式下的解决方案及其实现
- Web前端实现本地存储
- 图论500题——HDU_P1213 How Many Tables
- 剑指offer——解决面试题的思路
- intellij idea常用设置详解