15.Three Sum
思路
- 直接暴力,\(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. 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), ...
- LeetCode#15 | Three Sum 三数之和
一.题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组. 注意:答案中不可以包含 ...
- 【leetcode】15. 3 Sum 双指针 压缩搜索空间
Given an integer array nums, return all the triplets [nums[i], nums[j], nums[k]] such that i != j, i ...
- oracle 按时间段统计15分钟内的数据
string sql = "select to_char(StartTime, 'yyyy')||'-'|| to_char(StartTime, 'mm')||'-'|| to_char( ...
- oracle中sum求和问题
如列表所示:都是选填字段name age salary weight张三 18 20李四 17王五 21燕小六 15 22 sum(age+salar ...
- sum()函数——MATLAB
a=sum(A) %列求和 b=sum(A,2) %行求和 c=sum(A(:)) %矩阵求和 假定A为一个矩阵: sum(A)以矩阵A的每一列为对象,对一列内的数字求和. sum(A,2)以矩阵A ...
- 08-numpy-笔记-sum
求和: axis = 0 按列求和 axis = 1 按行求和 >>> import numpy as np >>> a = np.mat([[1,2,3],[4, ...
- 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 ...
- java多线程系类:JUC线程池:06之Callable和Future(转)
概要 本章介绍线程池中的Callable和Future.Callable 和 Future 简介示例和源码分析(基于JDK1.7.0_40) 转载请注明出处:http://www.cnblogs.co ...
随机推荐
- python在cmd上导包成功,但是python charm上面就提示找不到
失败 成功 原因:我的python file名称和numpy 的名字一样了,把python file 的名字改了就好了
- CF #April Fools Day Contest 2016 E Out of Controls
题目连接:http://codeforces.com/problemset/problem/656/E 愚人节专场的E,整个其实就是个Floyd算法,但是要求代码中不能包含 definedoforfo ...
- Python re 正则表达式简介
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- css代码实现
纯 CSS 实现下面我们探讨下,使用纯 CSS 的方式能否实现. hover 伪类实现 使用 hover 伪类,在鼠标悬停在按钮上面时,控制动画样式的暂停. 关键代码如下: <div class ...
- spine动画融合与动画叠加
spine动画融合与动画叠加 一.动画融合setMix 1.概述:两个动作之间的平滑过渡 参数duration为需要多少时间从fromAnimation过渡到toAnimation,过渡时间为动画重叠 ...
- php生成二维码的几种方式整理及使用实例
hp生成二维码的方式:1.google开放api:2.php类库PHP QR Code:3.libqrencode:4.QRcode Perl CGI & PHP scripts感兴趣的朋友可 ...
- linux 安装memcached C/C++使用libmemcached库(续)
#include <iostream> #include <string> #include <libmemcached/memcached.h> using na ...
- luogu P1015 回文数
题目描述: 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制 ...
- abstract、virtual、sealed
abstract与virtual前必有public 1.abstract,抽象 1)只要使用到了abstract定义了方法,那么类就一定得用abstract定义,public abstract,只有抽 ...
- Scrapy 爬虫框架入门案例详解
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...