给出一个数和一个有序数组,找出该数组中之和等于该数的两个数

来源:互联网 发布:2017网络水军招募 编辑:程序博客网 时间:2024/04/29 18:00

今天写的一个版本:

1、有序数组,先写一个二分查找的方法

private static int[] erfen(int[] a,int left,int right,int num) {//left:数组a的左边界//right:数组a的右边界//num:目标数//返回int[0]是是否找到了该数,1为找到了,0为未找到;int[1]是如果找到了则返回改数的序号,如果未找到则返回离改数最近的比改数小的数的序号int[] res=new int[2];int mid = (right+left)/2;if(num==a[mid])res[0]=1;while(mid<right&&mid>left&&num!=a[mid]){if(num>a[mid])left=mid;else if(num<a[mid])right=mid;    mid = (right+left)/2;if(num==a[mid])res[0]=1;}res[1]=mid;return res;}

2、调用以上方法

public static int[] twoSum(int[] nums, int target) {int[] res=new int[2];if(nums.length>1){int[] erfen = new int[2];erfen = erfen(nums,0,nums.length,target);//先使用一次二分查找,确定查找的右边界int right = erfen[1];for(int i = 0 ; i <=right ; i++){int second = target-nums[i];int[] erfen1 = new int[2];erfen1 = erfen(nums,i,right+1,second);if(erfen1[0]==0){right=erfen1[1];//更新右边界}else{res[0]=i+1;res[1]=erfen1[1]+1;            break;}}}return res;}

3、写一个测试的主方法

public static void main(String[] args) {int[] a = new int[]{2,7,11,15,16};int target = 26;int[] b = new int[2];b=twoSum(a,target);for(int i:b){System.out.println(i);}}

有待继续优化。。。。。。

0 0
原创粉丝点击