三指针遍历比较三个数组中的元素
初始时,三个指针分别指向三个数组头:
- 若指向的三数相等,则该书满足要求,输出该数
- 若指向的三数不等,则取其中最大的数max,并通过移动指针使另外两个指针指向的数字大于等于max
遍历结束的条件是:某一个数组遍历结束即退出循环
public class Main {
public static void main(String[] args) {
int[] queue1 = {1,2,3,7,8,15,16,19,22};//长度为9
int[] queue2 = {1,3,5,7,8,9,10,15,19,22};//长度为10
int[] queue3 = {1,3,5,7,8,11,15,19,20,22};//长度为10
search(queue1,queue2,queue3);
}
public static void search(int[] queue1,int[] queue2,int[] queue3){
int a=0,b=0,c=0; //分别指向三个队列开头的元素
while(a<queue1.length&&b<queue2.length&&c<queue3.length){
if(queue1[a]==queue2[b]&&queue2[b]==queue3[c]) { //三个队列中都存在某元素,直接输出,输出后三指针都移动
System.out.print(queue1[a] + " ");
a++;b++;c++;
}else{
int max=Math.max(queue1[a],Math.max(queue2[b],queue3[c]));//确定当前指向元素中的最大值max
//移动指针直到当前指针在对应数组中指向的元素大于等于max值
while (a<queue1.length&&queue1[a]<max){
a++;
}
while(b<queue2.length&&queue2[b]<max){
b++;
}
while(c<queue3.length&&queue3[c]<max){
c++;
}
}
}
}
}