week1-NO.1 Two Sum
来源:互联网 发布:苏州爱知电机有限公司 编辑:程序博客网 时间:2024/05/02 01:11
题目
https://leetcode.com/problems/two-sum/?tab=Description
思路
由于很长时间没有编程,所以就按顺序选择了这道难度为easy的题练练手。这道题难度很低,很容易解答,唯一的一点难度就是对vector容器的正确使用。算法使用了两层循环,第一层循环遍历每一个元素,第二层循环向遍历查找是否存在使得与这个元素相加得到目标值的另外一个元素,时间复杂度是O(n^2)。
源程序class Solution {public: vector<int> twoSum(vector<int>& nums, int target) { vector<int> answer; for(int i = 0;i <nums.size() - 1;i ++) for(int j = i + 1;j < nums.size();j ++) if(nums[i] + nums[j] == target){ answer.push_back(i); answer.push_back(j); break; } return answer; }};
运行时间
249ms
改进
在提交的运行时间分布中,本次提交的运行时间排名很落后,于是上网查找,并学习了一种利用map提高效率的算法。
该算法只用遍历一次所有元素,在遍历到每一个元素时,将<目标值与该元素的差,该元素的坐标>放入map中,如此在下面的循环中可通过判断某个元素是否已经存在于map中来判断是否存在两个相加为目标值的元素。该算法的时间复杂度为O(n)。
源程序class Solution {public: vector<int> twoSum(vector<int> &numbers, int target) { int n = numbers.size(); vector<int> result; map<int, int> index; for (int i = 0; i < n; i++) { if (index.count(numbers[i]) != 0) { // if exists result.push_back(index[numbers[i]]); result.push_back(i); break; } index[target - numbers[i]] = i; } return result; }};
运行时间
15ms
0 0
- week1-NO.1 Two Sum
- week1-leetcode #1-Two Sum[Easy]
- No.1 Two Sum
- 算法设计Week1 LeetCode Algorithms Problem #1 Two Sum
- Leetcode NO.1 Two Sum
- LeetCode No.1 Two Sum
- LeetCode--No.1--Two Sum
- leetcode No.1 Two Sum
- LeetCode No.1 Two Sum
- 【LeetCode】No.1 Two Sum
- LeetCode No.1 Two Sum
- LeetCode No.1 Two Sum
- [leetcode NO.1] Two Sum (JAVA)
- leetcode No.1 - two sum题解
- LeetCode Week1: Two Sum、Add Two Numbers、Median of Two Sorted Arrays
- LeetCode(Let it go)-Two Sum-NO.1
- 每日一练之Two sum [leetcode No.1]
- Two sum no map by C
- 170226
- 最大流(dinic) hdu3572
- rails资源
- 配置maven环境以及eslipse的一些配置
- 程序员练级攻略----转自酷壳网coolshell.c n
- week1-NO.1 Two Sum
- AOJ0033 (DFS)
- CSU-1022
- 二月英语主旋律——发音练习
- codeforce 738 C Road to Cinema 选车 (二分)
- android中TabLayout的使用和icon与文字的位置设置
- Android:25种开源炫酷动画框架
- 36-模板方法设计模式
- 136. Single Number