概述
排序数组中的两个数字之和(java)
1.双指针法
public class FindTwo {
public static void main(String args[]){
//查找两数之和,数组按照升序排列,且一个数字不能重复使用两次
//双指针法
int [] data=new int[]{1,3,4,5,6,8,9,10,11,14,18};
int targetdata=15;
int [] ans=new int[2];
ans=NumFind(data,targetdata);
System.out.println("数字所在位置为:"+ ans[0] + ": "+ data[ans[0]]+"--------"+ ans[1]+": "+data[ans[1]]);
}
public static int[] NumFind(int [] num,int targetnum){
int [] solu=new int[2];
int i,j;
i=0;
j=num.length-1;
while(i<j){
if(num[i]+num[j]<targetnum){
i++;
}if(num[i]+num[j]>targetnum){
j--;
}
if(num[i]+num[j]==targetnum){
break;
}
}
solu[0]=i;
solu[1]=j;
return solu;
}
}
- 二分查找法
public class FindTwo2 {
public static void main(String args[]){
//查找两数之和,数组按照升序排列,且一个数字不能重复使用两次
//二分查找法
int [] data=new int[]{1,3,4,5,6,8,9,10,11,14,18};
int targetdata=32;
int [] ans=new int[2];
ans=ErFenfa(data,targetdata);
System.out.println("数字所在位置为:"+ ans[0] + ": "+ data[ans[0]]+"--------"+ ans[1]+": "+data[ans[1]]);
}
public static int[] ErFenfa(int [] num,int targetnum) {
int [] ans= new int[2];
int i,j,flagx;
int low,high,mid;
low=0;
high=num.length-1;
mid=(low+high)/2;
for(i=0;i<num.length;i++) {
flagx=0;
low=0;
high=num.length-1;
mid=(low+high)/2;
while (low<high && flagx==0){
if(num[mid]<targetnum-num[i]){
low=mid+1;
mid=(low+high)/2;
}if(num[mid]>targetnum-num[i]){
high=mid-1;
mid=(low+high)/2;
}if(num[mid]==targetnum-num[i]){
flagx=1;
break;
}
}
if(flagx==1){
break;
}
}
ans[0]=i;
ans[1]=mid;
return ans;
}
}
最后
以上就是糊涂故事为你收集整理的排序数组中的两个数字之和(java)的全部内容,希望文章能够帮你解决排序数组中的两个数字之和(java)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复