15. 三数之和
解析:
这题其实很简单,就是时间卡的太死,很离谱,确实是O(N^2)的方法,但循环里用个unorered_map都超时,
所以先排序,然后暴力就好了,暴力的基础上注意每层循环的值只取一次就ok,算不上优题,恶心题
class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { std::unordered_map<int, int> vis; std::unordered_map<string, bool> ret_vis; set<string> h_set; for (int i = 0; i < nums.size(); i++) { vis[nums[i]] += 1; } sort(nums.begin(), nums.end()); vector<vector<int>> ret; for (int i = 0; i < nums.size(); i++) { if (i > 0 && nums[i] == nums[i - 1]) continue; int a = nums[i]; for (int j = i + 1; j < nums.size(); j++) { if (j > i + 1 && nums[j] == nums[j - 1]) continue; int b = nums[j]; int c = 0 - a - b; if (vis[c] && c >= b) { if ((a == b || a == c) && vis[a] < 2 || b == c && vis[b] < 2) { continue; } if (a == b && a == c && vis[a] < 3) continue; int x = std::min(a, std::min(b, c)); int z = std::max(a, std::max(b, c)); int y = 0 - x - z; ret.push_back(vector<int> {a, b, c}); } } } return ret; } };
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。

浙公网安备 33010602011771号