本文主要是介绍leetcode217-Intersection of Two Arrays,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
这道题目要求俩个数组的交集,且不能重复,我们可以很自然的想到一种办法,就是先遍历第一个数组,将元素存入set,然后再遍历第二个数组,如果元素在set中存在那就说明该元素是肯定存在于第一个数组中的,同时可以把该元素也存入一个set(因为要求输出数组中元素是唯一的),set相对来说数据结构要比数组复杂,所以cpu时间也不会低
还有另外一种方法,这种在数组类算法中一定要考虑到这种方法,就是用数组元素的值作为另外一个数组的下标,这种思路在排序以及这个题目中都是有效的,当然前提一定是下标的范围是有限的,比如这道题目他就限制了数组元素的值不超过1000,我们可以新建一个1001长度的数组,把第一个数组的元素作为新数组的下标,值为1存入,然后遍历第二个数组,值如果是1的可以将值更新为2。然后我们再遍历这个新的数组,值为2的元素对应的下标就是俩个数组的一些交际元素了
import java.util.HashSet;
import java.util.Set;public class intersectionofTwoArrays {public static void main(String[] args) {int[] nums1 = {4,9,5};int[] nums2 = {9,4,9,8,4};int[] res = getOnly(nums1,nums2);for(int i = 0;i<res.length;i++) {System.out.println(res[i]);}System.out.println("================");int[] arr = getOnly(nums1,nums2);for(int i = 0;i<arr.length;i++) {System.out.println(arr[i]);}}public static int[] getOnlyOtherVersion(int[] nums1,int[] nums2) {int [] arr = new int[1001];for(int i = 0;i < nums1.length;i++) {arr[nums1[i]] = 1;}for(int i = 0;i<nums2.length;i++) {if(arr[nums2[i]] == 1) {arr[nums2[i]] = 2;}}int len = 0;for(int i = 0;i<arr.length;i++) {if(arr[i] == 2) {len++;}}int j = 0;int[] res = new int[len];for(int i = 0;i<arr.length;i++) {if(arr[i] == 2) {res[j++] = i;}}return res;}public static int[] getOnly(int[] nums1,int[] nums2) {Set set = new HashSet();for(int i = 0;i<nums1.length;i++) {set.add(nums1[i]);}Set<Integer> setOne = new HashSet();for(int i = 0;i<nums2.length;i++) {if(set.contains(nums2[i])) {setOne.add(nums2[i]);}}int j = 0;int[] res = new int[setOne.size()];for(int i : setOne) {res[j++] = i;}return res;}
}
这篇关于leetcode217-Intersection of Two Arrays的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!