每日一题(day1)
来源:互联网 发布:阿里云先知大会 编辑:程序博客网 时间:2024/05/24 16:16
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; }
不足之处:结果的顺序可能会不同
0 0
- 每日一题(day1)
- 每日一题(一)
- 每日一题(二)
- 每日一题(三)
- 每日一题(四)
- 每日一题(五)
- 每日一题(六)
- 每日一题(七)
- 每日一题(day2)
- 每日一题(day3)
- 每日一题(day4)
- 每日一题(day5)
- 每日一题(1):
- 每日一题(2):
- 每日一题(3):
- 每日一题(4):
- 每日一题(5):
- 每日一题(6):
- Openstack组件实现原理 — Nova 体系结构
- shell脚本中实现脚本a里面的函数调用脚本b中的函数参数-用到source关键字
- Spring知识点提炼
- MUI开发注意事项
- vim实用功能备忘
- 每日一题(day1)
- CF686B A - Little Robber Girl's Zoo
- 接口测试笔记1
- 动态规划之钢筋切割问题
- 一起talk C栗子吧(第一百七十三回:C语言实例--关闭终端中的缓冲功能一)
- 使用dom4j解析xml文件
- PAT 团体天梯赛 L2-002. 链表去重
- 这只是起点_16_07_07
- tyvj 1391 走廊泼水节