標籤:style class code java http tar
https://oj.leetcode.com/problems/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
思路1:對於每一個元素,遍曆尋找另一個元素使得和為target,時間複雜度O(n^2)。
思路2:先排序,然後首尾兩個指標向中間靠攏,兩指標所指元素大於target,移動尾指標,小於target移動頭指標,直至找到結果或者兩個指標相遇。時間複雜度O(nlogn)。此方法可推廣值3Sum,4Sum等,有待整理。
思路3:利用hashmap,將每個元素值作為key,數組索引作為value存入hashmap,然後遍曆數組元素,在hashmap中尋找與之和為target的元素。 時間複雜度O(n),空間複雜度O(n)。
public class Solution {public int[] twoSum(int[] numbers, int target) {int len = numbers.length;int[] result = new int[2];Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int i = 0; i < len; i++) {map.put(numbers[i], i);}for (int i = 0; i < len; i++) {int one = numbers[i];Integer two = map.get(target - one);if (two != null && i < two) {result[0] = i + 1;result[1] = two + 1;break;}}return result;}}