1. 程式人生 > >Crack LeetCode 之 1. Two Sum

Crack LeetCode 之 1. Two Sum

https://leetcode.com/problems/two-sum/
基本思路是做一個hanshmap,然後迭代查詢/插入這個hashmap。時間複雜度是O(n),空間複雜度也是O(n)。下文給出了C++和python的程式碼,python的程式碼非常簡潔,只有7行。

struct Solution {
    vector<int> twoSum(vector<int>& nums, int target) {
		vector<int> res;
		if(nums.empty() || nums.size()<2)
			return res;

		std::unordered_map<int, int> hashmap;
		for(int i=0;i<nums.size();i++) {
			if(hashmap.find(target-nums[i])!=hashmap.end()) {
				res.push_back(hashmap[target-nums[i]]);
				res.push_back(i);
				return res;
			}

			hashmap[nums[i]] = i;
		}

		return res;
	}
};
class Solution:
	def twoSum(self, nums, target):
		lookup = dict(((v, i) for i, v in enumerate(nums)))
		return next(( [i, lookup.get(target-v)]
				for i, v in enumerate(nums) 
					if lookup.get(target-v, i) != i), None)