我是靠谱客的博主 糊涂故事,这篇文章主要介绍排序数组中的两个数字之和(java),现在分享给大家,希望可以做个参考。

排序数组中的两个数字之和(java)

1.双指针法

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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; } }
  1. 二分查找法
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)的全部内容,更多相关排序数组中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部