Leetcode-Methodology-Preprocessing
来源:互联网 发布:淘宝销售属性虚拟类目 编辑:程序博客网 时间:2024/06/07 14:42
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
]
Code 1
#include <iostream>#include <list>#include <string>#include <iterator>#include <iomanip>#include <utility> #include <memory>#include <iostream>#include <vector>#include <unordered_set>#include <unordered_map>#include <algorithm>#include <vector>using namespace std;typedef unordered_set<int> intset;typedef pair<int, int> piit;typedef unordered_multimap<int/*2sum*/, piit> intmap;typedef unordered_multiset<int> intmset;class Solution {public: static vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> res; if (nums.size() < 3) return res; intmset mset; for (auto i : nums)mset.insert(i); /*special case */ vector<int> tmp(3,0); { auto resf = mset.equal_range(0); int mc = 0; for (auto it = resf.first; it != resf.second; ++it)mc++; if (mc>=3) res.push_back(tmp); } /**/ unordered_set<int> tset0, tset1; for (auto i : nums){ if (i > 0) tset1.insert(i); else if(i!=0) tset0.insert(i); } vector<int> minusV(tset0.begin(), tset0.end()), plusV(tset1.begin(), tset0.end()); for (int im = 0; im < minusV.size(); ++im) { for (int ip = 0; ip < plusV.size(); ++ip) { int t0 = 0 - minusV[im] - plusV[ip]; auto resf = mset.equal_range(t0); tmp[0] = minusV[im]; tmp[1] = t0; tmp[2] = plusV[ip]; int mc = 0; for (auto it = resf.first; it != resf.second; ++it) { mc++; } if (t0 == minusV[im] || t0 == plusV[ip]) { if (mc >= 2) res.push_back(tmp); } else if (t0 > minusV[im] && t0 < plusV[ip]) { if (mc >= 1) res.push_back(tmp); } } } return res; }// return};
Code 2
vector<vector<int> > threeSum(vector<int> &num) { vector<vector<int> > res; std::sort(num.begin(), num.end()); for (int i = 0; i < num.size(); i++) { int target = -num[i]; int front = i + 1; int back = num.size() - 1; while (front < back) { int sum = num[front] + num[back]; // Finding answer which start from number num[i] if (sum < target) front++; else if (sum > target) back--; else { vector<int> triplet(3, 0); triplet[0] = num[i]; triplet[1] = num[front]; triplet[2] = num[back]; res.push_back(triplet); // Processing duplicates of Number 2 // Rolling the front pointer to the next different number forwards while (front < back && num[front] == triplet[1]) front++; // Processing duplicates of Number 3 // Rolling the back pointer to the next different number backwards while (front < back && num[back] == triplet[2]) rear--; } } // Processing duplicates of Number 1 while (i + 1 < num.size() && num[i + 1] == num[i]) i++; } return res;}
0 0
- Leetcode-Methodology-Preprocessing
- Programming Methodology?
- website methodology
- sklearn preprocessing
- sklearn-Preprocessing
- Language Teaching Methodology
- Hidden Markov Model Methodology
- Performance Tuning Methodology
- Build relationship methodology
- What is ASAP Methodology
- Programming Methodology(一)
- Programming Methodology(二)
- Programming Methodology(三)
- Programming Methodology(四)
- Programming Methodology(五)
- Programming Methodology(六)
- Programming Methodology(七)
- Programming Methodology(八)
- VARIANT and VARIANTARG 中的byref
- jQuery 知识点总结
- Android studio 自动导入(全部)包 import
- [基础]Java内存和GC汇总
- C++第4次实验(基础班)
- Leetcode-Methodology-Preprocessing
- 由alert出来的对象是[object object],就感觉不知所措,而进一步思考,对象究竟是什么?即变成语言(如js、java、c等任意语言)中的变量,究竟是什么东西?
- 【Unity3d】窗体透明
- HTML5 Canvas+JS控制电脑或手机上的摄像头实例.
- c++实验三—百计百钱
- 构造函数那些事儿
- rs232公头、母头的引脚定义
- C++作业4
- Exynos4412 系统移植