面试题-排序数组中找两数之和为target的所有数的组合-leetcode167的变型题

题目描述:

给定排序数组arr,目标值target,寻找数组中所有和为target的数的组合,返回对应的索引。

题目没有说等于target的数对是否唯一,如果唯一,就是leetcode 167https://blog.csdn.net/orangefly0214/article/details/89155613

然而我也没有主动和面试官沟通题目,是否唯一,是否有重复的数,自己随手写了个数组{1,2,3,4,5},target=7,这样的话,满足条件的就有2对了,

所以题目变形为:

给定排序数组arr,目标值target,寻找数组中所有和为target的数的组合。(数组中和为target的数对不唯一,且数组中没有重复的元素。)

此时的解法:

排序数组,想到的就是二分查找,所以预设两个指针,从两边向中间扫描,每扫描到一对,打印,

public class twoSumComba {
	public static void main(String[] args) {
		int[] a = {1,2,3,4,5};
		int m = 7;
		find(a,m);
	}
	private static void find(int[] a, int m) {
		int start = 0;
		int end = a.length-1;
		while(start<end) {
			if(a[start]+a[end] == m) {
				System.out.println(start+","+end);
				start++;
				end--;
			} else if(a[start]+a[end] > m) {
				end--;
			} else if(a[start]+a[end] < m) {
				start++;
			}
		}
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值