leetcode(一)—— Two Sum(Python/C++)

来源:互联网 发布:增值税发票查询平台js 编辑:程序博客网 时间:2024/06/05 20:47

Python

这个题目的最新版本支持 0 开始的索引,显然从 1 开始的索引是有违程序员的道德的。

class Solution(object):    def twoSum(self, nums, target):        for i, x in enumerate(nums[:-1]):            for j, y in enumerate(nums[1:]):                    if x+y == target and i != j+1:                            return [i, j+1]if __name__ == '__main__':    sln = Solution()    print(sln.twoSum([2,1,9,4,4,56,90,3], 8))

时间复杂度为 O(n2) 的算法不足以拿到 offer,下面给出仅遍历一遍(O(n))即可求解的方案:

class Solution(object):    def twoSum(self, nums, target):        d = defaultdict(int)        for i, num in enumerate(nums):            if num not in d:                d[target-num] = i            else:                return [d[num], i]

这里所使用的字典 d,建立 值 与 与其关于 target 成互补关系的值的下标;

C++

我们根据第二版的 Python 代码,很容易给出 C++ 的实现形式:

#include <unordered_map>class Solution{public:    vector<int> twoSum(vector<int>& nums, int target)       {        unordered_map<int, int> d;        vector<int> ret;        for (size_t i = 0; i < nums.size(); ++i)        {            if (d.find(nums[i]) == d.end())            {                d[target-nums[i]] = i;            }            else            {                ret.push_back(d[nums[i]]);                ret.push_back(i);                break;            }        }        return ret;    }};
0 0
原创粉丝点击