Leetcode找三个数字的和满足xx条件的题目总结15➕16➕259
双指针最基础的题目是一个区间里找两个数字的和等于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的更多相关文章
- [LeetCode] Maximum Product of Three Numbers 三个数字的最大乘积
Given an integer array, find three numbers whose product is maximum and output the maximum product. ...
- LeetCode:三个数的最大乘积【628】
LeetCode:三个数的最大乘积[628] 题目描述 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例 1: 输入: [1,2,3] 输出: 6 示例 2: 输入: [1 ...
- LeetCode:三数之和【15】
LeetCode:三数之和[15] 题目描述 给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的 ...
- 验证abc三列数字符合我的小弟要求
需求好像是: 1.第一列数据有重复的找出来,并且找出它的重复位置 2.第三列根据第一列得出的位置,取出相应位置的数据进行相加 3.相加的结果 是否等同于第二列的对应位置数据 <!DOCTYPE ...
- leetcode第三题
leetcode第三题: 题目: 给定一个字符串,找出不含有重复字符的最长子串的长度. 源码(使用java语言): class Solution { public int lengthOfLonges ...
- LeetCode 628. 三个数的最大乘积
题目描述 LeetCode 628. 三个数的最大乘积 给定一个整型数组,在数组中找出由三个数组成的最大乘积,并输出这个乘积. 示例1 输入: [1,2,3] 输出: 6 示例2 输入: [1,2,3 ...
- js验证连续两位数字递增或递减和连续三位数字相同
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- JS基础,课堂作业,三个数字排序
三个数字大小排序 <script> var a = parseInt(prompt("请输入第一个整数:")); var b = parseInt(prompt(&qu ...
- CF D - Beautiful Graph(dfs 染色问题吧)给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法。
题意: 给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法. 分析: 很容易就可以发现如果这个图中是有奇数的环的话,那这是肯定不行的 ,否则这个环的贡献是为2^s ...
随机推荐
- Picture POJ - 1177 线段树+离散化+扫描线 求交叉图像周长
参考 https://www.cnblogs.com/null00/archive/2012/04/22/2464876.html #include <stdio.h> #include ...
- 深度优先搜索DFS---求出矩阵中“块”的个数。
题目: 给出一个 m x n 的矩阵,矩阵中的元素为0或1.如果矩阵中有若干个 1是相邻的,那么称这些1构成了一个“块”.求给定的矩阵中“块”的个数. 0 0 0 0 0 0 0 0 0 0 0 0 ...
- Eclipse使用Alibaba Cloud Toolkit极速部署项目
个人博客 地址:https://www.wenhaofan.com/a/20190716205809 什么是Alibaba Cloud Toolkit Cloud Toolkit 是针对 IDE 平台 ...
- web框架的基础原理
http协议 HTTP简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本 ...
- IntelliJ IDEA 2019.3注册码(亲测有效,可激活至 2089 年,持续更新~)
申明:本教程 IntelliJ IDEA 破解补丁.激活码均收集于网络,请勿商用,仅供个人学习使用,如有侵权,请联系作者删除. 注意 本教程适用于 IntelliJ IDEA 所有版本,请放心食用~ ...
- C# 工具类LogHelper
一.创建一个WinForm的项目,并通过NuGet安装log4net. 二.创建LogHelper类以及log4net.config配置文件. 三.编写相关代码. 1.LogHelper类 using ...
- Android_关于自定义view的dialog有黑影的问题
跟默认选中的主题有关 在build段代码中加入这行代码 dialog.getWindow().setBackgroundDrawableResource(android.R.color.transpa ...
- Java内置锁的简单认识
多线程开发离不开锁机制,现在的Java语言中,提供了2种锁,一种是语言特性提供的内置锁,还有一种是 java.util.concurrent.locks 包中的锁,这篇文章简单整理一下内置锁的知识点. ...
- BZOJ 3438 小M的礼物
BZOJ 3438 小M的礼物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- Spark学习之路 (一)Spark初识 [转]
官网介绍 什么是Spark 官网地址:http://spark.apache.org/ Apache Spark™是用于大规模数据处理的统一分析引擎. 从右侧最后一条新闻看,Spark也用于AI人工智 ...