[leetcode] 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


package com.wyt.leetcodeOJ;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * @author wangyitao
 * @version 1.0
 * 
 */
public class Two_sum {
	/**
	 * @param args<br>
	 * <p>測試例子<br>
	 * Input: numbers={2, 7, 11, 15}, target=9<br>
	 * Output: index1=1, index2=2
	 */
	public static void main(String[] args) {
		int[] numbers = {2, 3, 11, 15, 16, 17, 18, 19, 7};
		int target = 9;
		int[] a = twoSum(numbers, target);
		System.out.println(Arrays.toString(a));
	}

	/**
	 * @param numbers:帶求解int數組
	 * @param target:目標值
	 * @return 返回一個長度爲2的int數組,兩個index對應numbers元素之和爲target的值
	 */
	private static int[] twoSum(int[] numbers, int target) {
		int len = numbers.length;
	    int[] index = new int[2];

	    /**
	     * 思路:對於numbers中的一個元素a,它的期待值是target-a
	     * 以target-a爲鍵,a爲值,將其放入map,每次put查找key是否存在,存在的話
	     * 說明存在這一的一個two sum
	     */
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();

		for (int i = 0; i < len; i++) {
			if (!map.containsKey(numbers[i])) {//做一次查找,若存在就說明找到了數對
				map.put(target - numbers[i], i);//否則,放進map,繼續找
			} else {
				index[0] = map.get(numbers[i]) + 1;
				index[1] = i + 1;
			}
		}

		return index;
	}
}


發佈了30 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章