您的位置:首页 > 编程语言

Two Sum - LeetCode

2017-09-30 10:53 330 查看

#引子

这是一个在
LeetCode
上面难度被标明为
Easy
的二元算法问题(即已知输入求输出),描述为:

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [0, 1].


可以看到在空间复杂度上追求
O(1)
,时间复杂度就为
O(n
2
)
。如果以
风险均分
的思想来看待的话,不难得到一个空间复杂度为
O(n)
,时间复杂度为
O(n)
的程序算法。

#实现

一些实现过程的分析这里就不再啰嗦了,因为这个问题比较简单,程序用
C++
描述的结果如下:

class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
map<int, int> oddIndex;

vector<int> indices(2);

for (int i = 0; i < nums.size(); i ++) {
int index = oddIndex[nums[i]];

if (index >= 1) {
indices[0] = index - 1;
indices[1] = i;

break;
} else {
oddIndex[target - nums[i]] = i + 1;
}
}

return indices;
}
};


#总结

LeetCode
是个很不错的练习编程的网站,不过它是全英文的,当然问题的描述也是如此。而国内网站的话,主要有
牛客网
赛码网
。(这上面有各个大公司的笔试真题)在提交了代码后,会有一个综合评审:时间复杂度、空间复杂度,而且它还会
鼓励
你写出更好的程序代码。所以,你值得拥有!^_^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Two-Sum LeetCode 编程