2019独角兽企业重金招聘Python工程师标准>>>

int [] arr0 = new int [] {1 ,5 ,12 ,21 ,11 ,15 ,8 ,30} ;int [] arr2 = new int [] {2 ,3 ,12 ,9 ,17 ,30 ,25 ,35} ;// 将两个列表排序(升序)Arrays.sort(arr0);Arrays.sort(arr2);// log.info("==>{}" ,arr0); // [1, 5, 8, 11, 12, 15, 21, 30]// log.info("==>{}" ,arr2); // [2, 3, 9, 12, 17, 25, 30, 35]// 下面的比较算法只适用于两个列表长度相同时,否则应改进之 for(int i = 0 ,j = 0 ; i < arr0.length && j < arr2.length ;) {if(arr0[i] > arr2[j]) {log.info("A没有B有\t+>:{}" ,arr2[j]);j++ ;} else if(arr0[i] < arr2[j]) {log.info("A有B没有\t->:{}" ,arr0[i]);i++ ;} else {log.info("AB都有\t=>:{}" ,arr0[i]);i ++ ;j ++ ;}} 

下面给出一个改进型的算法,用于解决两个列表不能同时遍历完全的情况:

// 两个比较列表int [] arri = new int [] {1 ,5 ,12 ,21 ,11 ,72 ,15 ,8 ,30 ,17 ,43 ,21 ,56} ;int [] arrj = new int [] {2 ,3 ,12 ,9 ,17 ,30 ,25 ,35 ,21 ,41 ,58 ,72} ;// 将两个列表排序(升序)Arrays.sort(arri);Arrays.sort(arrj);List<Integer> iList = new ArrayList<Integer>() ;   // i列表List<Integer> jList = new ArrayList<Integer>() ; // j列表List<Integer> eqList = new ArrayList<Integer>() ;    // eq列表// 下面的比较算法只适用于两个列表长度相同时,否则应改进之int i = 0 ,j = 0 ;for(; i < arri.length && j < arrj.length ;) {if(i > 0 && arri[i - 1] == arri[i]) i++ ;     // 如果当前i与上一元素相等,跳过,避免单个列表重复元素在另外一个列表中至少也存在一个时,会错误两个同时递增导致非预期结果if(j > 0 && arri[j - 1] == arrj[j]) j++ ;     // 如果当前j与上一元素相等,跳过if(arri[i] > arrj[j]) {jList.add(arrj[j]) ;j++ ;} else if(arri[i] < arrj[j]) {iList.add(arri[i]) ;i++ ;} else {eqList.add(arri[i]) ;i ++ ;j ++ ;}}// 上面循环结束条件是i、j有一个遍历完全,所以只有三种情况if(i == arri.length && j < arrj.length) {System.out.println("j 未完成遍历!");// i与长度相等,说明i已遍历完全,但j小于长度,说明还有剩下的没有遍历到,原因是剩下的都比i最后一个元素要大(默认两个列表都按从小到大排序)for(int m = j ,len = arrj.length ; m < len ; m ++) {jList.add(arrj[m]) ;}} else if(i < arri.length && j == arrj.length) {System.out.println("i 未完成遍历!");// j与长度相等,说明j已遍历完全,但i小于长度for(int n = i ,len = arri.length ; n < len ; n ++) {iList.add(arri[n]) ;}} else {System.out.println("i、j皆完成遍历!");// i与长度相等、j与长度相等,即两个都遍历完全// 如果两个列表最大值相等,则一定会都遍历完全}System.out.println("i :" + iList.toString());   // i :[1, 5, 8, 11, 15, 43, 56]System.out.println("j :" + jList.toString()); // j :[2, 3, 9, 25, 35, 41, 58]System.out.println("eq:" + eqList.toString());    // eq:[12, 17, 21, 30, 72]

转载于:https://my.oschina.net/zhanglikun/blog/413747

快速找出两个列表差异部分相关推荐

  1. 表格字体缩小 php_如何快速找出两个Excel表格不同的地方?

    上一篇文章介绍了如何快速找出两个word文档不同的地方,这篇文章来说说如何快速找出两个Excel表格不同的地方,这里说的两个Excel表格,可以是同一个工作簿的不同sheet,也可以是两个不同的Exc ...

  2. js 快速找出两个数组中的不同元素或对象

    js 快速找出两个数组中的不同元素 var arr1 = [0,1,2,3,4,5]; var arr2 = [0,4,6,1,3,9]; function getArrDifference(arr1 ...

  3. 快速找出两个字符串中所有相同的字符

    面试时看到一个试题, 编写算法, 快速找出两个字符串中所有相同的字符. 现实现如下: 1. 利用TreeSet来查找是否有相同的字符(之前是利用TreeSet来查找) 2. 利用HashSet来查找是 ...

  4. python找出两个列表不同元素_python 找出两个列表的相同元素与不同元素

    python 找出两个列表的相同元素与不同元素,用了以下几种方法 1. 通过set 集合 list1 = [1,2,3] list2=[2,3,4] set1 = set(list1) set2 = ...

  5. 快速找出两个Word文档之间的差别

    我们经常会遇到这样的问题:两份Word文件之中,只有一些极为细小的区别,如果单纯通过人工的方法去进行校对,那么不仅效率很低,而且也容易出错,容易漏掉一些不太明显的区别.Word 2003已经内置了一个 ...

  6. python:找出两个列表中相同和不同的元素(使用推导式)

    #接口返回值 list1 = ['张三', '李四', '王五', '老二'] #数据库返回值 list2 = ['张三', '李四', '老二', '王七']a = [x for x in list ...

  7. 如何快速找出两直线交点?

    我们在CAD中经常会遇到各类的问题,如果想要让CAD中两条直线相交该怎么办呢?下面来教你解决的方法. 1.我们使用迅捷CAD编辑器,然后我们输入"EX",在弹出的多个命令中,选择第 ...

  8. 【正则表达式测试工具】使用正则表达式快速找出两列数据中不同的行

    例如像下面的这样的一堆海量数据(已省略部分),可能有几千组,在不编程的情况下如何快速找到不同的行?可能excel有办法,但是处理起来应该没我这样方便的. b_start b_end 100790 10 ...

  9. JS图像处理:找出两张图片的差异部分并提取出来

    两张图片比较 需求: 图A: 图B 图A图B尺寸相同,最后需求得到结果如图C: 关键API: var imgData=context.getImageData(x,y,width,height); 参 ...

最新文章

  1. (转)OpenCV版本的摄像机标定
  2. Linux入门第五集!MySQL8在Linux上的安装!MySQL的Linux资源分享!
  3. jvm十一:类加载器双亲委托机制
  4. Crawler:爬虫基于urllib.request库实现获取指定网址上的所有图片
  5. Javascript Throttle Debounce
  6. 三大纪律七项注意(Access数据库)
  7. 前端学习(757):预解析
  8. 在tomcat下context.xml中配置各种数据库连接池(转)
  9. Qt之利用事件过滤器在QLabel上画框
  10. HDU 3047 Zjnu Stadium 带权并查集
  11. 整理好全球半导体公司,看看哪些你的上下游厂家
  12. 富士通Fujitsu DPK8510E 打印机驱动
  13. 移动支付变巨头掘金地,银盒子手握SaaS成新宠
  14. 中国最美的40个地方 第一名竟然不是九寨沟
  15. BUUCTF_Crytpo_robomunication
  16. 阿里云 MaxCompute Tunnel Upload 上传典型问题整理
  17. Altium Designer19 多层板设计教程
  18. OpenResty安装、启停止_linux
  19. 回顾过去 展望未来(写给自己)
  20. 微信小程序php后端接收小程序前端数组(array)

热门文章

  1. java gettext返回值_012-关于EditText中的getText()方法的返回值类型以及string的转换问题(转)...
  2. mysql实现pr曲线_ROC 曲线与 PR 曲线
  3. mysql获取当前时间_MYSQL proxysql 在深入 信息获取和信息输出
  4. Webpack原理与实践
  5. MongoDB是什么以及它如何满足您的应用需求
  6. H5-Dooring可视化搭建平台的新技能
  7. 32单片机编程简单吗?单片机程序与桌面编程哪个难?
  8. 一道关于整型提升/截断的经典练习题
  9. HDU5762(暴力)
  10. 链表的基本操作(c++实现)