leetcode 4sum
2015-08-29 21:42
351 查看
前面已经做了2sum,3sum之类的了,其实这些t-sum都可以归纳为O(n-1 ^ (t-1))复杂度。先排序,
这个是比较通用的代码,80ms;
这个是比较通用的代码,80ms;
vector<vector<int>> fourSum(vector<int>& nums, int target) { vector< vector<int> > result; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size(); ++i) { for (int j = i + 1; j < nums.size(); ++j) { int temp = target - nums[i] - nums[j], m = j + 1, n = nums.size() - 1; while (m < n) { if (nums[m] + nums < temp) ++m; else if (nums[m] + nums > temp) --n; else { result.push_back({ nums[i], nums[j], nums[m], nums }); ++m; while (m < n && nums[m - 1] == nums[m]) ++m; --n; while (m < n && nums[n + 1] == nums ) --n; } } while (j + 1 < nums.size() && nums[j + 1] == nums[j]) ++j; } while (i + 1 < nums.size() && nums[i + 1] == nums[i]) ++i; } return result; }这个是直接查找,可以不用考虑中间重复的情况
vector<vector<int>> fourSum(vector<int>& nums, int target) { if(nums.size() < 4) return {}; vector< vector<int> > result; sort(nums.begin(), nums.end()); for (int i = 0; i < nums.size() - 3; ++i) for (int j = i + 1; j < nums.size() - 2; ++j) { int temp = target - nums[i] - nums[j], m = j + 1, n = nums.size() - 1; while (m < n) { if (nums[m] + nums < temp) ++m; else if (nums[m] + nums > temp) --n; else { vector<int> itemp({ nums[i], nums[j], nums[m], nums }); if (find(result.begin(), result.end(), itemp) == result.end()) result.push_back({ nums[i], nums[j], nums[m], nums }); ++m; --n; } } } return result; }
相关文章推荐
- The current branch is not configured for pull No value for key branch.master.merge found in configur
- Linux平台上SQLite数据库教程(二)——C语言API介绍
- UITextField 学习知识点
- 数据库设计 三范式
- Virtual-Key Codes
- 【Java】Hello World
- 用node.js+express.js+mongodb+jade开发一个完整的项目笔记(1)【页面即页面之间逻辑的制作】
- Android中的BroadcastReceiver设置permission
- Spring MVC Velocity模板引擎
- 大三上 期中考试
- UI中提供的七种手势
- java注解(Annotation)解析
- iOS定位原理和使用建议
- MongoDB的安全(五)
- 总结一下今天回顾的JavaIO的一些基本内容
- UIButton 学习知识点
- 一种另类的计算向量旋转公式(复杂慎用)
- Linux-CentOS6.4-PXE-DHCP-FTP
- 开博啦
- Android LoaderManager