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

32 篇文章 0 订阅

今天写的一个版本:

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值