思路
  • 直接暴力,\(O(n^4 log(n))\),不出意外的超时了。。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res; int i,j,k;
int len = nums.size();
for(i = 0; i < len; i++){
for(j = i+1; j < len; j++){
for(k = j+1; k < len; k++){
if(nums[i]+nums[j]+nums[k] == 0){
vector<int> inRes;
inRes.push_back(nums[i]);
inRes.push_back(nums[j]);
inRes.push_back(nums[k]);
bool ok = true;
for(int m = 0; m < res.size(); m++){
if(issame(inRes,res[m])){
ok = false;
continue;
}
}
if(ok) res.push_back(inRes);
}
}
}
}
return res;
}
bool issame(vector<int> a,vector<int> b){
if(a.size() != b.size()) return false;
sort(begin(a),end(a));
sort(begin(b),end(b));
bool ok = true;
for(int i = 0; i < a.size(); i++){
if(a[i] != b[i]){
ok = false;
}
}
return ok;
}
};
  • 利用map暴力,时间复杂度 \(O(n^3 log(n))\),依然超时。。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> res;
map<int,int> tmp;
int i,j,k;
int len = nums.size();
for(i = 0; i < len; i++){
tmp[nums[i]] = i;
}
for(i = 0; i < len; i++){
for(j = i+1; j < len; j++){
vector<int> inRes = {};
if(tmp.find(-(nums[i]+nums[j])) != tmp.end() && tmp[-(nums[i]+nums[j])] != i && tmp[-(nums[i]+nums[j])] != j){
inRes.push_back(nums[i]);
inRes.push_back(nums[j]);
inRes.push_back(-(nums[i]+nums[j]));
bool ok = true;
for(int m = 0; m < res.size(); m++){
if(issame(inRes,res[m])) ok = false;
}
if(ok){
res.push_back(inRes);
}
} }
}
return res;
}
bool issame(vector<int> a,vector<int> b){
if(a.size() != b.size()) return false;
sort(begin(a),end(a));
sort(begin(b),end(b));
bool ok = true;
for(int i = 0; i < a.size(); i++){
if(a[i] != b[i]){
ok = false;
}
}
return ok;
}
};
  • 利用3个指针,首先固定一个,然后类似于Two Sum问题。(这里是用map存储返回结果的,需要避免重复的问题,而直接用set存储就方便许多了),复杂度为 \(O(n^2)\),如果用set的话,复杂度应该是 \(O(n^3)\)
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int i,lo,hi;
int len = nums.size();
sort(nums.begin(), nums.end());
vector<vector<int>> res; for(int i = 0; i < len-2; i++){
int lo = i+1,hi = len-1;
int sum = -nums[i];
if(i == 0 || (nums[i] != nums[i-1] && i > 0)){
while(lo < hi){
if((nums[lo] + nums[hi]) == sum){
vector<int> tmp;
tmp.push_back(nums[i]);
tmp.push_back(nums[lo]);
tmp.push_back(nums[hi]);
cout << tmp[0] << " " << tmp[1] <<" " << tmp[2] << endl;
res.push_back(tmp);
while(lo < hi && nums[lo] == nums[lo+1]){
lo++;
}
while(lo < hi && nums[hi] == nums[hi-1]){
hi--;
}
lo++;hi--;
}
else if ((nums[lo]+nums[hi]) < sum)
{
lo++;
}else hi--;
}
}
}
return res;
}
};

15.Three Sum的更多相关文章

  1. 1. Two Sum + 15. 3 Sum + 16. 3 Sum Closest + 18. 4Sum + 167. Two Sum II - Input array is sorted + 454. 4Sum II + 653. Two Sum IV - Input is a BST

    ▶ 问题:给定一个数组 nums 及一个目标值 target,求数组中是否存在 n 项的和恰好等于目标值 ▶ 第 1题,n = 2,要求返回解 ● 代码,160 ms,穷举法,时间复杂度 O(n2), ...

  2. LeetCode#15 | Three Sum 三数之和

    一.题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...

  3. 【leetcode】15. 3 Sum 双指针 压缩搜索空间

    Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i ...

  4. oracle 按时间段统计15分钟内的数据

    string sql = "select to_char(StartTime, 'yyyy')||'-'|| to_char(StartTime, 'mm')||'-'|| to_char( ...

  5. oracle中sum求和问题

    如列表所示:都是选填字段name   age salary weight张三     18      20李四     17王五     21燕小六  15      22 sum(age+salar ...

  6. sum()函数——MATLAB

    a=sum(A)  %列求和 b=sum(A,2) %行求和 c=sum(A(:)) %矩阵求和 假定A为一个矩阵: sum(A)以矩阵A的每一列为对象,对一列内的数字求和. sum(A,2)以矩阵A ...

  7. 08-numpy-笔记-sum

    求和: axis = 0 按列求和 axis = 1 按行求和 >>> import numpy as np >>> a = np.mat([[1,2,3],[4, ...

  8. ORA-00494: enqueue [CF] held for too long (more than 900 seconds) by 'inst 1, osid 5166'

    凌晨收到同事电话,反馈应用程序访问Oracle数据库时报错,当时现场现象确认: 1. 应用程序访问不了数据库,使用SQL Developer测试发现访问不了数据库.报ORA-12570 TNS:pac ...

  9. java多线程系类:JUC线程池:06之Callable和Future(转)

    概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...

随机推荐

  1. JS存在性

    var myObject = { a:2 }; ("a" in myObject);//true ("b" in myObject);//false myObj ...

  2. 篇2 安卓app自动化测试-初识python调用appium

    篇2              安卓app自动化测试-初识python调用appium --lamecho辣么丑 1.1概要 大家好!我是lamecho(辣么丑),上一篇也是<安卓app自动化测 ...

  3. js倒计时,秒倒计时,天倒计时

    按天倒计时 HTML代码1: <Script Language="JavaScript"> <!-- Begin var timedate= new Date(& ...

  4. uoj #58 【WC2013】糖果公园

    题面:http://uoj.ac/problem/58 正解:树上带修改莫队. 首先Orz vfk大神,树上莫队的套路还是很厉害的..http://vfleaking.blog.163.com/blo ...

  5. [工具技巧] SecureCRT使用技巧 V1.0

    本文档适用对象为需要使用secureCRT做系统或网络等调试的工程师,其必须有用过该款软件,基础功能会使用.对于那些需要修改大量设备的配置时像远程升级等等,更应该学习本文档. 1       Secu ...

  6. Web常见约定规范(精选)

    常见的约定规范 (一)HTML约定规范 1,html属性顺序:id class name data-xxx (src for type href)(title alt)(aria-xxx role) ...

  7. 浅谈OA办公软件市场行情

    3.原文:http://www.jiusi.net/detail/472__776__3999__1.html 关键词:oa系统,OA办公软件 浅谈OA办公软件市场行情 中国的OA办公软件市场历经20 ...

  8. Adline网络的LMS算法与梯度下降

    LMS算法,即为最小均方差,求的是误差的平方和最小. 利用梯度下降,所谓的梯度下降,本质上就是利用导数的性质来求极值点的位置,导数在这个的附近,一边是大于零,一边又是小于零的,如此而已... 而这个里 ...

  9. MySQL自增长的bug?

    实验环境: mysql> status--------------mysql Ver 14.14 Distrib 5.7.14, for Linux (x86_64) using EditLin ...

  10. wdc网站部署问题

    最近公司新买了一个服务器,将项目迁移到新服务器上,按照wdcp安装方法,部署了lnamp环境,具体方法如下: 安装方法1 只安装wdcp面板看看wget http://down.wdlinux.cn/ ...