博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
给定两个有序的整形数组,找出里边的相同元素
阅读量:5098 次
发布时间:2019-06-13

本文共 1361 字,大约阅读时间需要 4 分钟。

题目:给定两个有序数组,需要找出两个数组中的相同元素?

笨拙的解法,就是两层for循环嵌套,时间复杂度为 N 方。

当时回答的解答,两个下标分别指向数组的头部,比如,i 指向数组 a 的头部,j 指向数组 b 的头部,那么比较 a[i] 和 b[j] ,如果 a[i] 较大,移动 j,如果 b[j] 较大,那么 移动 i,如果相等,那么 i 和 j 往后挪动,采用这种方式,只需要一次遍历即可,代码如下:

public class FindCommon {    public static List
getCommons(int[] a , int[] b){ if( a.length <= 0 || b.length <= 0 ){//如果任何一个数组为空,那么就没有相同元素,边界判断 return null; } List commons = new ArrayList<>(); int i = 0,j=0; for (;i
= b.length){ break; } //如果 a[i] 较大,那么就移动 j(前提:两个数组都是有序数组) while ( j < b.length-1 && a[i] > b[j]){ j++; } if(a[i] == b[j]){ commons.add(a[i]); if( j < b.length ){ j++; } } } return commons; } public static void main(String[] args) { int a[] = {1,1,1,1,3,5,6,8,9}; int b[] = {1,1,3,5,7,10,12}; List
result = getCommons(b,a); for (int i : result){ System.out.print(i+","); } }}

运行结果如下:

细心的童鞋,可能会发现,当 a[i] > a[j] 的时候,我多加了一个判断: j < b.length - 1 ,为什么呢?是因为,如果是 j < b.length 时,这种情况下,j 已经到达了 b[] 的末尾,然而在末尾的时候,做了j++的运算,在下边的判断 a[i] == b[j] 的地方就会发生下标越界的情况,希望大家来纠错! 

 

转载于:https://www.cnblogs.com/qxynotebook/p/8808304.html

你可能感兴趣的文章
【大话存储II】学习笔记(2章), SSD
查看>>
SQLHelp sql数据库的DAL
查看>>
阅读学术论文的心得体会from小木虫
查看>>
Python——Message控件
查看>>
多线程下单例模式:懒加载(延迟加载)和即时加载
查看>>
从 fn_dbLog 解析操作日志(补充update)
查看>>
JavaEE 数据库随机值插入测试
查看>>
this
查看>>
判断对象类型 type()
查看>>
Php函数之end
查看>>
腾讯AB题
查看>>
C# 实现冒泡算法--不一定效率,但很容易理解
查看>>
如何开发AR增强现实应用与产品
查看>>
C++中遍历lua table
查看>>
Python 编程快速上手 第 7章 模式匹配与正则表达式
查看>>
深度解析vuex
查看>>
Android开发之基于监听的事件处理
查看>>
1600802010韩璐——大作业界面
查看>>
CodeVS 1226 倒水问题【DFS/BFS】
查看>>
ROR 第一章 从零到部署--安装环境
查看>>