日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[Leetcode][第题][JAVA][两个数组的交集 II1][双指针][HashMap]

發布時間:2023/12/10 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leetcode][第题][JAVA][两个数组的交集 II1][双指针][HashMap] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【問題描述】[中等]

【解答思路】

1. 哈希映射

復雜度分析

class Solution {public int[] intersect(int[] nums1, int[] nums2) {if (nums1.length > nums2.length) {return intersect(nums2, nums1);}Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int num : nums1) {int count = map.getOrDefault(num, 0) + 1;map.put(num, count);}int[] intersection = new int[nums1.length];int index = 0;for (int num : nums2) {int count = map.getOrDefault(num, 0);if (count > 0) {intersection[index++] = num;count--;if (count > 0) {map.put(num, count);} else {map.remove(num);}}}return Arrays.copyOfRange(intersection, 0, index);} } public int[] intersect(int[] nums1, int[] nums2) {HashMap<Integer, Integer> map = new HashMap<>();List<Integer> list = new ArrayList<>();for(int num : nums1) {if(!map.containsKey(num)) map.put(num, 1);else map.put(num, map.get(num) + 1);}for(int num : nums2) {if(map.containsKey(num)) {map.put(num, map.get(num) - 1);if(map.get(num) == 0) map.remove(num);list.add(num);}}int[] res = new int[list.size()];for(int i = 0; i < list.size(); i++) {res[i] = list.get(i);}return res;}
2. 雙指針


復雜度分析

class Solution {public int[] intersect(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int length1 = nums1.length, length2 = nums2.length;int[] intersection = new int[Math.min(length1, length2)];int index1 = 0, index2 = 0, index = 0;while (index1 < length1 && index2 < length2) {if (nums1[index1] < nums2[index2]) {index1++;} else if (nums1[index1] > nums2[index2]) {index2++;} else {intersection[index] = nums1[index1];index1++;index2++;index++;}}return Arrays.copyOfRange(intersection, 0, index);} } public int[] intersect(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);List<Integer> list = new ArrayList<>();int p1 = 0, p2 = 0;while(p1 < nums1.length && p2 < nums2.length) {if(nums1[p1] < nums2[p2]) p1++;else if(nums1[p1] > nums2[p2]) p2++;else {list.add(nums1[p1]);p1++;p2++;}}int[] res = new int[list.size()];for(int i = 0; i < res.length; i++) res[i] = list.get(i);return res;}
3. 輔助數組(不推薦)

時間復雜度:O(N^2) 空間復雜度:O(N)

public int[] intersect(int[] nums1, int[] nums2) {int len1 = nums1.length;int len2 = nums2.length;List<Integer> ans = new ArrayList<>();if(len1<=len2){ans = cross(len1,len2,nums1,nums2);}else{//len1>len2ans = cross(len2,len1,nums2,nums1);}int[] res = new int[ans.size()];for(int i = 0; i < res.length; i++) res[i] = ans.get(i);return res;}public List<Integer> cross(int shao,int duo,int[] nums1,int[] nums2 ){List<Integer> ans = new ArrayList<>();boolean[] a = new boolean[duo]; for(int num:nums1){for(int i = 0;i<duo;i++){if(num == nums2[i] && !a[i]){ans.add(num);a[i]=true;break;}}}return ans;}

【總結】

1.函數返回一個長度不確定的數組 (int[ ])

方法一:List轉Int數組 (逐個復制)

List<Integer> list = new ArrayList<Integer>(); //LinkedList<Integer> list = new LinkedList<Integer>();list.add(1);list.add(2);int count = list.size();int[] aux = new int[count];for(int i = 0; i < count; i++){aux[i] = list.poll();}return aux;

方法二:使用函數Arrays.copyOfRange

int length1 = nums1.length, length2 = nums2.length; int[] intersection = new int[Math.min(length1, length2)]; return Arrays.copyOfRange(intersection, 0, index);
2.交集問題 雙指針 HashMap
3.String[] 與 List < String > 互轉
String[] strings1 = {"a", "b", "c"};// String[] 轉 List<String>List<String> list3 = Arrays.asList(strings1);// List<String> 轉 String[]String[] strings2 = list3.toArray(new String[0]);

參考鏈接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/liang-ge-shu-zu-de-jiao-ji-ii-by-leetcode-solution/

參考鏈接:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/solution/liang-chong-jie-fa-javashi-xian-by-lyl0724-2/

總結

以上是生活随笔為你收集整理的[Leetcode][第题][JAVA][两个数组的交集 II1][双指针][HashMap]的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。