classSolution { public: vector<int> twoSum(vector<int>& nums, int target){ unordered_map<int, int> value_index_map; vector<int> result; for(int i = 0; i < nums.size(); i++) { value_index_map[nums[i]] = i; } for(int i = 0; i < nums.size(); i++) { int now_pair = target - nums[i]; if(value_index_map.find(now_pair) != value_index_map.end() && value_index_map[now_pair] > i) { result.push_back(i); result.push_back(value_index_map[now_pair]); } } return result; } };
解决方案2(Python)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
classSolution(object): deftwoSum(self, nums, target): """ :type nums: List[int] :type target: int :rtype: List[int] """ value_index_map = {} for index, value in enumerate(nums): value_index_map[value] = index for index, value in enumerate(nums): if target-value in value_index_map: index2 = value_index_map[target-value] if index != index2: return index, index2
解决方案3(Golang)
1 2 3 4 5 6 7 8 9 10
functwoSum(nums []int, target int) []int { mapping := make(map[int]int) for index_i, value := range nums { if index_j, got_it := mapping[value]; got_it { return []int{index_i, index_j} } mapping[target-nums[index_i]] = index_i } returnnil }
解决方案4(Ruby) 2017-05-27
1 2 3 4 5 6 7 8 9 10 11 12
# @param {Integer[]} nums # @param {Integer} target # @return {Integer[]} deftwo_sum(nums, target) map = {} nums.each_with_index do|num, idx| i = map[num] return [i, idx] if i map[target-num] = idx end end
解决方案5(Javascript) 2018-11-11
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
/** * @param {number[]}nums * @param {number}target * @return {number[]} */ var twoSum = function(nums, target) { var result = []; var map = {}; for (var i = 0; i < nums.length; i++) { if (typeof(map[target-nums[i]]) !== 'undefined') { result.push(map[target-nums[i]]); result.push(i); } map[nums[i]] = i; } return result; };