【Leetcode】two sum JAVA

本文介绍了一种解决两数之和问题的有效算法。该问题要求在给定整数数组中找到两个数,使其和等于特定目标值,并返回这两个数的下标。文章详细解释了使用哈希表来提高搜索效率的方法。

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

这道题是说,给你一组数,看能不能选择其中两个数相加达到target的数字(我第一次读的时候没读懂,是不是特别二……)。然后最关键的是要返回的不是这两个数字的值,而是他们的index+1!也就是第几个。而且好处是,只有一组这样的数,而且必须index1>index2

这种问题果断用hashmap啊!!一看到这种key value对应的,要往集合那里去想~

整体思路:

0.既然index要分大小,咱先sort

1.遍历每一个数字,定住一个找另一个

2.定住一个的时候,往map的pool里面找有没有contains,有就返回这两个数字(想想返回顺序谁大?)

4.如果没有,就往pool里放,没准与你match的那个数在后面

public class twosum {
	public static void main(String args[]){
		int[] a={1,23,5,2};
		int aim=3;
		twosum ts = new twosum();
		int n=ts.twoSum(a,aim).length;
		for(int i=0;i<n;i++)
		System.out.println(ts.twoSum(a,aim)[i]);
	}
	
	public int[] twoSum(int[] numbers, int target) {
		int result[] = new int[2];
		HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
		for(int i=0;i< numbers.length;i++){
			//如果现有的map pool里面已经有了
			if(map.containsKey(target-numbers[i])){
				result[0]=map.get(target-numbers[i]);
				result[1]=i+1;
				break;
			}
			//如果没有,放进map的pool里
			else	map.put(numbers[i],i+1);
		}
		return result;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值