62,621
社区成员
发帖
与我相关
我的任务
分享
带不带猜的,假定长数组中目标数平均分布且恰好为最后一个,那就只需要短数组与长数组划分之后的最后一个数字比较。
以上纯属YY。
int a[3]={-1,4,5};
int b[10]={-15,1,3,4,5,7,8,9,10,15};
int k = 0 , j = 0;
for(; k < 3 ;) {
if(a[k] > b[j]) {
j++;
}else if(a[k] == b[j]) {
printf("b[%d]=%d\n",j,b[j]);
j++;//不知道有没有重复的元素,如果有的话用j++,如果没有重复元素,用j++;k++;
}else {
k++;
if(k > 2) {//当b比a大的时候表示b中已经没有与a匹配的元素了
break;
}
}
}
printf("k %d\n" ,k);//循环执行次数m + n - i,i表示第一个比a[m-1]大的元素的位置
来学习 !import java.util.ArrayList;
import java.util.List;
public class Test7 {
public static void main(String[] args) {
int[] a = {-1,4,5};
int[] b = {-15 ,1 ,3 ,4 ,5 ,7 ,8 ,9 ,10 ,15};
List<Integer> list = new ArrayList<Integer>();
for (int i:a){
list.add(i);
}
for (int j:b){
if (list.indexOf(j)!=-1){
System.out.println(j);
}
}
}
}
类归并比M*N快 求非常有想象力的解法
public static void find2(int[] a, int[] b) {
int ia = 0, ib = 0;
while (ia < a.length) {
while (ib < b.length) {
if(b[ib] > a[ia]) break;
else if(b[ib] == a[ia]){
++ib;
System.out.println(a[ia]);
break;
}
++ib;
}
++ia;
}
}
int[] a = {-1,4,5};
int[] b = {-15,1,3,4,5,7,8,9,10,15};
int init = 0;
List<Integer> rtnList = new ArrayList<Integer>();
for(int i = 0;i<a.length;i++) {
for(int j = init;j<b.length;j++){
System.out.println("[i:"+i+"][a[i]:"+a[i]+"][j:"+j+"][b[j]:"+b[j]+"]");
if (a[i] == b[j]) {
init=j+1;
rtnList.add(a[i]);
System.out.println("break");
break;
} else if (a[i] < b[j]) {
init=j+1;
System.out.println("break");
break;
}
}
} int[] a = {-1,4,5};
int[] b = {-15,1,3,4,5,7,8,9,10,15};
int init = 0;
List<Integer> rtnList = new ArrayList<Integer>();
for(int i = 0;i<a.length;i++) {
for(int j = init;j<b.length;j++){
if (a[i] == b[j]) {
init=j+1;
rtnList.add(a[i]);
break;
}
}
}
先结贴 没可用分发帖了。。。。。。。。。。。。。。。。。