Two Sum

题目描述:

   Given an array of integers,

   find two numbers such that they add up to a specific target number.
   The function twoSum should return indices of the two numbers
   such that they add up to the target, where index1 must be less than index2.
   Please note that your returned answers (both index1 and index2) are not zero-based.
   You may assume that each input would have exactly one solution.
   Input: numbers={2, 7, 11, 15}, target=9

   Output: index1=1, index2=2

思路:先排序数组并且在数组左右两边各放一个标记,不停将标记数字相加,若大于目标则将右坐标向前推一位(因为排过序所以等于缩小二者的和),反之则将左坐标向后推一位(增大二者的和)。还有一点很重要的是要记录排序前数组的下标,排序后数组会发生改变。

public class Two_Sum {
	public static int result[]=new int[2];
	public static int[] twoSum(int array[],int target)
	{
		HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
		for(int i=0;i<array.length;i++)
		{
			map.put(array[i], i); 
		}
		Arrays.sort(array);
		int start=0;
		int end=array.length-1;
		while(end>start)
		{
			if(array[end]+array[start]==target)
			{
				result[0]=Math.min(map.get(array[start])+1,map.get(array[end])+1);
				result[1]=Math.max(map.get(array[start])+1,map.get(array[end])+1);
				break;
			}
			if(array[end]+array[start]>target)
			{
				end--;
			}
			if(array[end]+array[start]<target)
			{
				start++;
			}
		}
		return result;
	}
	public static void main(String[] args) {
	     int numbers[]={2,11,7,15,8,4};
        int target=11;
        System.out.println(Arrays.toString(twoSum(numbers,target)));
	}
}




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值