在做新旧接口交替过程中,遇到了老接口和新接口json数据有些不一致的情况,需要比较两个json对象,把相同的元素赋其中一个json对象中变量的值。而且其中一个json最后输出格式还需要改变下属性名,思来想去觉得和“找出两个数组相同元素”很像,所以做下总结。

“有一个数组A{0,2,3,5}和一个数组B{3,5,6,2,1,1},找出这两个数组相同元素。”

一开始抽象出这道题时,脑海里浮现出最简单粗暴的方法,逐一比较。

//最简单粗暴的做法,逐个比较,时间复杂度为(B.length)^(A.length),b的a次方了,时间复杂度相当高

for(int i = 0 ;i < A.length ; i ++){for(int j = 0 ;j < B.lengh;j++){if( A[i] ==B[j] ){

System.out.println(A[i]);

}

}

}

后面脑子一转,可以先排序再进行比较,排序的话,用最慢的冒泡排序法,时间复杂度是(B.length)^2+(A.length)^2+(一些莫名其妙的比较算法),总之时间复杂度比上面那个算法低就是了。这是第二种算法,就不贴代码了。

第三种算法,思路是先把两个数组合并,再排序一下,重复的元素自然就出来了,而至于说B数组里面本来就有重复元素,这个简单,把B数组先去重再和A数组合并就行了。

就是说B数组{3,5,6,2,1,1},经过去重后变成{3,5,6,2,1}

public void deDuplication(int[] oraginalArr){for(int i = 0 ; i < oraginalArr.length ;i++){if(int[i]==int[i+1]){

System.out.println(int[i]);

}

}

}//用最慢的冒泡排序法,从小到大排列

public int[] sort(int[] messyArr){for(int i = 0 ;i < messyArr.length ;i++){for(int j = (i+1) ; j < (messyArr.length) ; j++){//如果第一个数比第二个数大,则两数交换

if(messyArr[i] >messyArr[j ]){int temp =messyArr[i];

messyArr[i]=messyArr[j ];

messyArr[i+1] =temp;

}

}

returnmessyArr;

}

这样子时间复杂度一下子就变成了B.length+(B.length)^2,这就是算法的魅力。

网上又查了一些资料,还有一个用堆排序来找出两数组的相同元素的,时间复杂度在n(log2n)左右,感觉时间复杂度应该是最低的吧。

至于用HashMap,HashSet去重的,我感觉这些集合内部应该也是用了某种算法吧,感觉还是自己写的算法可以计算时间复杂度比较好一点,性能一算就知道了,如果有小伙伴能分析hashMap和hashSet去重的时间复杂度,欢迎探讨,谢谢。

python查找两个数组中相同的元素_找出两个数组的相同元素,最优算法?相关推荐

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

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

  2. js判断数组中重复元素并找出_JavaScript判断数组重复内容的两种方法(推荐)

    前言 一般,我们可能会给数组去重,这个操作并不复杂,执行一个循环就是了.现在,我要做的是,判断数组中是否有重复的内容,如果有,返回 true 否则,返回 false. 思路 把数组变成字符串 循环原数 ...

  3. 查找txt中的中文字符_找出nginx请求日志中某个url请求总次数排名前十的ip地址...

    答案如下: # 利用linux自带命令:sort.awk.grep.head.uniq组合得出相应的答案 awk '{print $1}' | grep 'www.xxxx.com' access.l ...

  4. 找出两列表的共有元素python_python 找出两个dataframe中不同的元素

    pandas从Excel中读取数据,数据格式为dataframe格式 用for循环对进行两个列的数据比较想找出不同的元素时,发现数据是一样的,但是比较结果却是相同和不同的都存在(总之就是不是我以为的效 ...

  5. ios 数组中的字典排序_题解 | 26.删除排序数组中的重复项

    假设我们有一个传感器,会不停地向 HQ 传输已经归类好数据,数据的格式全部是数字(种类编号),且已经按照从小到大的顺序排列,大概是 [1,1,4,5,7,9] 这样的,但是我们的需求在于,希望知道有多 ...

  6. java二维数组周边元素_求出二维数组主对角线、次对角线以及周边元素之和

    某个同学的题目,写了一下. 题目大概是这样的: 编写函数,求出二维数组主对角线.次对角线以及周边元素之和. 要求:二维数组的行数.列数.数组元素在main函数中由键盘输入. #include int ...

  7. java找出两个数组中不同元素_java 找出两个list中不同值

    展开全部 可以通过遍历两个string数组来实现. 代码e5a48de588b63231313335323631343130323136353331333365656633如下: package co ...

  8. 查找python矩阵中最大元素_找出矩阵中最大的元素

    当提示输入矩阵中的行数,然后提示输入这些行的元素时,我需要找到矩阵中最大的元素并返回其位置(行和列).在 例如,如果输入2行,如下所示: [1 3 7] [4 8 1] 最大元素的位置将是(1,1), ...

  9. 找出一批正整数中的最大偶数_找出一批正整数中最大的偶数,c语言怎么写?

    展开全部 1.打开5261C-Free5.0新建一个空白页面4102,然后将1653C语言的基础格式写完,注意回格式缩进.答 2.然后输入"   int a=10; float b=5,c; ...

最新文章

  1. Python数据分析入门之pandas基础总结
  2. mysql中的触发器
  3. LeetCode Reverse Words in a String III
  4. 2019-ACM-ICPC-南京区网络赛-E. K Sum(莫比乌斯反演 + 杜教筛)
  5. 集合添加元素python_Python基础:列表、字典、元组、集合、添加和删除元素,增删...
  6. Oracle实战笔记(第二天)
  7. case when then的用法-leetcode交换工资
  8. 【汇编语言与计算机系统结构笔记05】汇编的系统结构,从C代码生产汇编代码,一个具体的、经典的数据传送指令(mov)实例与分析
  9. CCF NOI1056 表达式
  10. 内网通3.4.3045版本 免广告码 积分码 算法
  11. 在Windows上安装TeXLive
  12. Android拍照失败以及成功后拿不到照片(照片裁剪加载失败)原因之一
  13. python显示血量条,利用Python绘制血药浓度-时间曲线——口服吸收一室模型
  14. Karto跑下载的数据集
  15. 软件系统三员管理_3个可怕的系统管理员故事
  16. Keras 主要的层函数
  17. 那些浏览器的神仙插件
  18. 妈蛋,这玩意还真不得不会!
  19. 鸿蒙符和无级符,《少年三国志》乾坤无极评析:乾坤闪避控制废,无极复活两将兴?...
  20. ELASTICSEARCH 搜索的评分机制

热门文章

  1. JDK7的maven项目切换到JDK8全纪录
  2. 论文浏览:Edge Based Graph Neural Network to Recognize Semigraph Representation of English Alphabets
  3. 单变量微积分笔记——积分
  4. TTiki-Taka: Attacking and Defending Deep Learning-based Intrusion Detection Systems 论文分析
  5. 【Web UI自动化测试】page页面对象代码示例
  6. 单细胞分析实录(8): 展示marker基因的4种图形(一)
  7. python subprocess popen 多次重定向_python subprocess.Popen系列问题
  8. 用电脑为妈妈下载她喜欢的音乐
  9. UR机械臂学习(4):UR机械臂仿真
  10. 服务器03系统在win10的电脑花屏,win10玩吃鸡电脑显示花屏怎么办-修复win10玩吃鸡电脑显示花屏的方法 - 河东软件园...