每日一题(day1)
2016-07-07 23:40
411 查看
Leetcode001
Two Sum问题知识更新:find_if、sort、lambda表达式
方法1:暴力方法(失败)
vector<int> twoSum(vector<int>& nums, int target) { vector<int> res(2); for (int i = 0; i<nums.size() - 1; i++) for (int j = i + 1; j < nums.size(); j++) if ( nums[j] == target - nums[i]){ res[0] = i; res[1] = j; break; } return res; }
失败原因:时间复杂度太高
方法2:哈希方法(失败)
vector<int> twoSum(vector<int>& nums, int target) { vector<int> res(2); unordered_map<int, int> nums_map; for (int i = 0; i < nums.size(); i++) { auto j = find_if(nums_map.begin(), nums_map.end(), [&](const std::pair<int, int> &pair) { return pair.second == target - nums[i]; }); if (j != nums_map.end()) { res[0] = j->first; res[1] = i; break; } nums_map[i] = nums[i]; } return res; }
失败原因:map不支持按值查找,用find_if代替
方法3:双指针方法(成功)
vector<int> twoSum(vector<int>& nums, int target) { vector<int> res(2); vector<pair<int,int>> nums_sorted; int head = 0; int tail = nums.size() - 1; for (int i = head; i <= tail; i++) nums_sorted.push_back(make_pair(i, nums[i])); sort(nums_sorted.begin(), nums_sorted.end(), [&](pair<int,int> a, pair<int,int> b) { //从小到大排序 return a.second < b.second; }); while (head < tail) { int sum = nums_sorted[head].second + nums_sorted[tail].second; if (sum == target) { res[0] = nums_sorted[head].first; res[1] = nums_sorted[tail].first; break; } else sum > target ? tail-- : head++; } return res; }
不足之处:结果的顺序可能会不同
相关文章推荐
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- leetcode----Longest Substring Without Repeating Characters
- [LeetCode]47 Permutations II
- [LeetCode]65 Valid Number
- [LeetCode]123 Best Time to Buy and Sell Stock III
- [LeetCode] String Reorder Distance Apart
- [LeetCode] Sliding Window Maximum
- [LeetCode] Find the k-th Smallest Element in the Union of Two Sorted Arrays
- [LeetCode] Determine If Two Rectangles Overlap
- [LeetCode] A Distance Maximizing Problem
- leetcode_linearList
- leetcode_linearList02
- 021-Merge Two Sorted Lists(合并两个排好序的单链表);leetcode
- LeetCode[Day 1] Two Sum 题解
- LeetCode[Day 2] Median of Two Sorted Arrays 题解
- LeetCode[Day 3] Longest Substring Without... 题解
- LeetCode [Day 4] Add Two Numbers 题解