双指针最基础的题目是一个区间里找两个数字的和等于Target。首先将区间从小到大排序。接下来只要一个le指针,一个ri指针,分别从区间左右边界往中间推进即可。复杂度是排序的nlogn。

下面几道题都是一个区间里找三个数字的和满足xx条件的。这个题目的做法首先还是先排序。之后先固定一个数字,然后在该数字的右侧区间内重新使用之前找两个数字的和的算法。i 从0到n-1,j 从i+1开始增加,k 从n-1开始减小直到j和k碰撞。这样的复杂度是n平方。外层i从0到n-1是O(n),内层从i+1到n-1也是O(n)。

15

 class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
if(nums.empty()){return vector<vector<int>>();}
sort(nums.begin(),nums.end());
vector<vector<int>> res;
int n=nums.size();
for(int i=;i<n;++i){
if(i> and nums[i-]==nums[i]){continue;}
int j=i+,k=n-;
while(j<k){
while(j<k and j>i+ and nums[j]==nums[j-]){
++j;
}
while(j<k and k<n- and nums[k]==nums[k+]){
--k;
}
if(j>=k){break;}
if(nums[i]+nums[j]+nums[k]>){
--k;
}
else if(nums[i]+nums[j]+nums[k]<){
++j;
}
else{
res.push_back({nums[i],nums[j],nums[k]});
++j,--k;
}
}
}
return res;
}
};

16

 class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
int n=nums.size();
if(n<){return ;}
sort(nums.begin(),nums.end());
int min_distance=INT_MAX,temp,sum=;
for(int i=;i<n;++i){
if(i> and nums[i]==nums[i-]){continue;}
int j=i+,k=n-;
while(j<k){
if((temp=nums[i]+nums[j]+nums[k]-target)>){
if(temp<min_distance){
min_distance=temp;
sum=temp+target;
}
--k;
while(j<k and nums[k]==nums[k+]){
--k;
}
}
else if(temp<){
if(-temp<min_distance){
min_distance=-temp;
sum=temp+target;
}
++j;
while(j<k and nums[j-]==nums[j]){
++j;
}
}
else{
return target;
}
}
}
return sum;
}
};

259

 class Solution {
public:
int threeSumSmaller(vector<int>& nums, int target) {
int N=nums.size(),res=;
sort(nums.begin(),nums.end());
for(int i=;i<N-;++i){
int j=i+,k=N-;
while(j<k){
if(nums[i]+nums[j]+nums[k]<target){
res+=k-j;
j++;
}
else{
k--;
}
}
}
return res;
}
};

Leetcode找三个数字的和满足xx条件的题目总结15➕16➕259的更多相关文章

  1. [LeetCode] Maximum Product of Three Numbers 三个数字的最大乘积

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  2. LeetCode:三个数的最大乘积【628】

    LeetCode:三个数的最大乘积[628] 题目描述 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1 ...

  3. LeetCode:三数之和【15】

    LeetCode:三数之和[15] 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的 ...

  4. 验证abc三列数字符合我的小弟要求

    需求好像是: 1.第一列数据有重复的找出来,并且找出它的重复位置 2.第三列根据第一列得出的位置,取出相应位置的数据进行相加 3.相加的结果 是否等同于第二列的对应位置数据 <!DOCTYPE ...

  5. leetcode第三题

    leetcode第三题: 题目: 给定一个字符串,找出不含有重复字符的最长子串的长度. 源码(使用java语言): class Solution { public int lengthOfLonges ...

  6. LeetCode 628. 三个数的最大乘积

    题目描述 LeetCode 628. 三个数的最大乘积 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例1 输入: [1,2,3] 输出: 6 示例2 输入: [1,2,3 ...

  7. js验证连续两位数字递增或递减和连续三位数字相同

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  8. JS基础,课堂作业,三个数字排序

    三个数字大小排序 <script> var a = parseInt(prompt("请输入第一个整数:")); var b = parseInt(prompt(&qu ...

  9. CF D - Beautiful Graph(dfs 染色问题吧)给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法。

    题意: 给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法. 分析: 很容易就可以发现如果这个图中是有奇数的环的话,那这是肯定不行的 ,否则这个环的贡献是为2^s ...

随机推荐

  1. Kali Linux中Chrome浏览器不能启动的问题

    kali中自带了Chromium Web Browser,我点了几次没反应.我还以为是Chrome的版本问题.于是下载了Chrome的deb包. 安装中还解决了一个包依赖问题.安装成功还是不能启动.于 ...

  2. sc 与 net 命令

    查看命令的帮助: help sc 或者 help net net: net start mysql  打开服务 net stop mysql 关闭服务 net pause mysql 暂停服务 sc ...

  3. Elasticsearch操作Document文档

    1.利用客户端操作Document文档数据        1.1 创建一个文档(创建数据的过程,向表中去添加数据)            请求方式:Post    请求地址:es所在IP:9200/索 ...

  4. 【spring boot】SpringBoot初学(6)– aop与自定义注解

    前言 github: https://github.com/vergilyn/SpringBootDemo 一.AOP 官方demo:https://github.com/spring-project ...

  5. linux查找含有xxx内容的文件

    find . -name *.json |xargs grep "6379" |awk '{print $1}'|uniq

  6. gulp常用插件之gulp-notify使用

    更多gulp常用插件使用请访问:gulp常用插件汇总 gulp-notify这是一款gulp通知插件. 更多使用文档请点击访问gulp-notify工具官网. 安装 一键安装不多解释 npm inst ...

  7. <转载> 撤销 git reset 操作

    https://blog.csdn.net/mhlghy/article/details/84786497

  8. P3329 [ZJOI2011]最小割

    题目描述 小白在图论课上学到了一个新的概念--最小割,下课后小白在笔记本上写下了如下这段话: 对于一个图,某个对图中结点的划分将图中所有结点分成两个部分,如果结点 s 和 t 不在同一个部分中,则称这 ...

  9. Gauss消元模板

    ; //高斯消元模板 //----------------------------------------------------------------------------------- //把 ...

  10. Appium+Python移动端(Android)自动化测试环境搭建

    一.安装JDK 下载好jdk安装包后直接下一步直至安装完成即可,安装完JDK后配置环境变量 :计算机→属性→高级系统设置→高级→环境变量: 系统变量→新建 JAVA_HOME 变量 变量值填写jdk的 ...