首页 > 代码库 > Leetcode#15 3Sum
Leetcode#15 3Sum
原题地址
跟2sum、3sum、4sum、3sum closest一系列,参见这篇文章
排序+DFS+剪枝+二分查找
如果最后一个元素不二分查找会超时??
代码:
1 vector<vector<int> > res; 2 3 void dfs(vector<int> &num, vector<int> ans, int pos, int left, int sum) { 4 if (left == 0) { 5 if (sum == 0) 6 res.push_back(ans); 7 return; 8 } 9 10 if (left == 1) {11 int l = pos;12 int r = num.size() - 1;13 while (l <= r) {14 int m = (l + r) / 2;15 if (num[m] + sum == 0) {16 ans.push_back(num[m]);17 res.push_back(ans);18 ans.pop_back();19 return;20 }21 else if (num[m] + sum < 0)22 l = m + 1;23 else24 r = m - 1;25 }26 return;27 }28 29 unordered_set<int> old;30 for (int i = pos; i < num.size(); i++) {31 if (old.find(num[i]) != old.end())32 continue;33 if (sum + left * num[i] > 0)34 break;35 if (sum + num[i] + (left - 1 ) * num[num.size() - 1] < 0)36 continue;37 old.insert(num[i]);38 ans.push_back(num[i]);39 dfs(num, ans, i + 1, left - 1, sum + num[i]);40 ans.pop_back();41 }42 }43 44 vector<vector<int> > threeSum(vector<int> &num) {45 sort(num.begin(), num.end());46 dfs(num, vector<int>(), 0, 3, 0);47 return res;48 }
Leetcode#15 3Sum
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。