1. 一个错误的思路:用小的那个数组,逐个扫描大的数组,如果存在,就加入新Arraylist。但是,这个算法有个很严重的问题,没有考虑次数
比如:
{3,1,2}
{1,1}
这样输出的是{1,1},但是结果是{1},所以,这个不行:
class Solution {public int[] intersect(int[] nums1, int[] nums2) {int len1=nums1.length;int len2=nums2.length;if(len1>len2){return comp(nums1,nums2);}else{return comp(nums2,nums1);}}public int[] comp(int[] arr_big,int[] arr_small){ArrayList<Integer> al=new ArrayList<Integer>();for(int i=0;i<arr_small.length;i++){for(int j=0;j<arr_big.length;j++){if(arr_small[i]==arr_big[j]){al.add(arr_small[i]);break;}}}int[] result=new int[al.size()];for(int i=al.size()-1;i>=0;i--){result[i]=al.get(i);}return result;}
}
2.先各自排序(如升序),然后用两个指针,比较两个数组,小的那个,往前走,继续比较,这样的目的是,升序后,后面的数比前面的大,如果其中一个数组前面的数已经都比另一个数组现在指针的数值小了,就应该往后走了。
例如:
{1,1,1,2,3,4,5,6,7,8} index
class Solution {public int[] intersect(int[] nums1, int[] nums2) {if(nums1.length==0||nums2.length==0){int[] nu={};return nu;}Arrays.sort(nums1);Arrays.sort(nums2);ArrayList<Integer> ls=new ArrayList<Integer>();int index1=0;int index2=0;while(true){if((index1>=nums1.length)||(index2>=nums2.length)){break;}if(nums1[index1]==nums2[index2]){ls.add(nums1[index1]);index1++;index2++;}else if(nums1[index1]<nums2[index2]){index1++;}else{index2++;}}int size=ls.size();int[] result=new int[size];for(int i=0;i<size;i++){result[i]=ls.get(i);}return result;}
}
{3,4,5,6,7}  index B
那么,如果index A所指的数比indexB的小,(比如,A-》3,B-》4),那就只有可能和B所相同的数在A往后走了
3.思路,考虑次数,就先把其中一个数组存入表,值是键,次数为表的值;

用另一个数组扫描,有的话就加入结果中,并且把次数减一。

另外,因为代码中需要返回null,整数是不能赋值null的,所以需要Integer才行,注意哟
另外,有一个注意,就是map取出来的值,有可能是0,有可能是null,所以和数值或者null对比的时候,容易有问题;
class Solution {public int[] intersect(int[] nums1, int[] nums2) {HashMap<Integer,Integer> map=new HashMap<Integer,Integer>();for(int i=0;i<nums1.length;i++){//注意,一定要用Integer,因为对象才有null,int是没有null的Integer value=map.get(nums1[i]);map.put(nums1[i],(value==null?1:value+1));}ArrayList<Integer> al=new ArrayList<Integer>();for(int i=0;i<nums2.length;i++){//这里可能有一个问题,就是map.get(nums2[i])有可能是null(数组为空),有可能是0,但是null!=0这个判断是有问题的。所以,//要不然就从一开始排除空数组情况,要不然就map.containsKey(nums2[i])把这个放在前面,短路&&后面的//的表达式if(map.containsKey(nums2[i])&&map.get(nums2[i])!=0){if(map.get(nums2[i])!=0){  al.add(nums2[i]);map.put(nums2[i],map.get(nums2[i])-1);}}}  int size=al.size();int[] result = new int[size];for(int i=0;i<size;i++){result[i]=al.get(i);}return result;}
}

L350 两个数组的交集 ii leetcode相关推荐

  1. LeetCode算法题350:两个数组的交集II(Intersection of Two Arrays II)

    技术交流可以加: 本人微信:xcg852390212 本人qq:852390212 学习交流qq群1(已满): 962535112 学习交流qq群2: 780902027 两个数组的交集II Leet ...

  2. L349. L350两个数组的交集

    两个数组的交集 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2] 示例 2: 输入: nums1 = ...

  3. leetcode初级算法4.两个数组的交集 II

    leetcode初级算法4.两个数组的交集 II 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] intersect(int[] nums1, in ...

  4. 两个对象数组交集_yiduobo的每日leetcode 349.两个数组的交集 amp;amp; 350.两个数组的交集II...

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧 349.两个数组的交集https://leetcode-cn.com/problems/intersection ...

  5. leetcode系列-350.两个数组的交集II

    leetcode系列–第350题.两个数组的交集II 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集. 返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一 ...

  6. LeetCode 350. 两个数组的交集 II

    350. 两个数组的交集 II 难度简单640收藏分享切换为英文接收动态反馈 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集.返回结果中每个元素出现的次数,应与元素在两 ...

  7. 两个数组的交集 II

    两个数组的交集 II 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2,2] 示例 2: 输入:nums1 ...

  8. LeetCode 350. 两个数组的交集 II ntersection of Two Arrays II

    Table of Contents 一.中文版 二.英文版 三.My answer 四.解题报告 一.中文版 给定两个数组,编写一个函数来计算它们的交集. 示例 1: 输入: nums1 = [1,2 ...

  9. Leetcode 350. 两个数组的交集 II 解题思路及C++实现

    解题思路: 和349. 两个数组的交集 这道题目很相似,这道题只是在返回的数组中,多了重复的数字,其实相较于349题,350题更简单. 先对两个数组进行排序,然后遍历这两个数组,找到相同的数字之后,就 ...

最新文章

  1. matlab练习程序(简单图像融合)
  2. matlab z变换离散化_MATLAB作图从入门到熟练
  3. Hive_ 对比分区,分桶
  4. 模块化妙用!用vue3实现一个鼠标追踪器和异步加载组件
  5. 基于Maven的SSH框架搭建
  6. Extjs4前端开发代码规范参考
  7. jeecg-framework 采用eclipse-maven运行
  8. Kostya the Sculptor
  9. 华为机试HJ1:字符串最后一个单词的长度
  10. oracle 分页过程,oracle存储过程分页的完整例子
  11. Linux不同发型版本(Debian REHL)与软件包管理器(RPM dpkg)的概念
  12. numeric比较大小 数据库_Liquibase 数据库版本管理工具:3. changeSet 变更集详解
  13. BigData | 一文带你搞清楚“数据倾斜”
  14. 祝威廉 :Rust FFI 实践
  15. MySQL · myrocks · 事务锁分析
  16. MyBatis(四)------MyBatis的生命周期及配置实例
  17. 如何完全的卸载MySQL数据库?
  18. 浮动QQ在线客服代码,兼容各大浏览器
  19. 数学建模多元分析实例
  20. Server 2016 + Win10 搭建CA证书登录环境

热门文章

  1. 东芝存储器控股公司将通过优先股和贷款进行1.2万亿日元融资
  2. SQL Server 辅助软件系列
  3. 静电设备在静电处理环节中的原理
  4. 戴尔电脑开机出现Recovery怎么解决
  5. java编写电器商店管理系统,设计家电销售管理系统
  6. echarts雷达图 echart雷达图 雷达图
  7. 计算机主机光驱弹不出来怎么办,光驱弹不出来怎么办?电脑光驱弹不出来如何解决?...
  8. Docker 设置 DNS
  9. python编写12306窗体抢票软件(一)
  10. ios5.0不完美越狱