三数之和 LeetCode热题100

news/2024/11/8 11:59:40/

题目

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

思路

为保证不重复,给数组排个序,遍历时同一个位置跳过遍历过的数。选定一个数x,另外两个数和则应为-x。由于数组是递增的求首尾之和,若结果大于-x,则右边界往左移,小于则左边界往右移,等于则两侧同时收缩。 里面两层循环优化证明:给出一组递增数列 a b c d e f.若 a+f>0,则x(x属于{b c d e})+f必定大于0,f肯定不会构成符合要求的组合,淘汰f。若a+f<0,则a+y(y属于{b,c,d,e})必定小于0,a必定不会构成符合要求的组合。a+f=0,因为不能出现重复的组合,三个数之和确定两个数则第三个数也是确定的,让a往右收缩一位到b,a+f=0,b>a,=>b+f>0,所以f也得收缩一位。

代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int> >list;int len=nums.size();vector<int>x;sort(nums.begin(),nums.end());int a=0x3f3f3f,cnt=0;for(int i=0;i<len-2;i++){if(nums[i]==a){continue;}else{a=nums[i];}int b=0x3f3f3f,k=len-1,c=nums[k];for(int j=i+1;j<len-1;){if(j>=k){break;}int sum=nums[i]+nums[j]+nums[k];if(sum==0){x.clear();x.push_back(nums[i]);x.push_back(nums[j]);x.push_back(nums[k]);list.push_back(x);while(c==nums[k]&&k>j){k--;}c=nums[k];}else if(sum>0){while(c==nums[k]&&k>j){k--;}c=nums[k];}else{while(b==nums[j]&&j<k){j++;}b=nums[j];}}}return list;}
};

http://www.ppmy.cn/news/1007905.html

相关文章

设计模式——面向对象的7大设计原则

1.单一职责原则 一个类中最好只放一种类型的方法&#xff0c;比如Dao中只有和数据库交互相关的代码。实现高内聚&#xff0c;低耦合。 2.开闭原则 对外拓展开放&#xff0c;对内修改关闭&#xff0c;有新的需求时不要修改已有代码&#xff0c;而是添加新的代码&#xff0c;比…

合宙Air724UG LuatOS-Air script lib API--ntp

ntp Table of Contents ntp ntp.timeSync(period, fnc, fun) ntp 模块功能&#xff1a;网络授时. 重要提醒&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 本功能模块采用多个免费公共的NTP服务器来同步时间 并不能保证任何时间任何地点都能百分…

分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测

分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测 目录 分类预测 | MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 MATLAB实现WOA鲸鱼算法同步优化特征选择结合支持向量机分类预测…

关于HIVE的分区与分桶

1.分区 1.概念 Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录&#xff0c;每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区&#xff0c;这样的查询效率会提高很多 个人理解白话:按表中或者自定义的一个列,对数据进…

Vue 简版文件预览笔记

简版文件预览笔记 调用方法 <script lang"ts" setup>import {exportFileData,preViewFile,} from /xxx/tools.ts;import {fileDownload,} from /api/xxx/xx;// 预览方法const handleViewBtn () > {const filePath 获取预览地址;const urlFormat 获取预…

vscode无法连接远程服务器的可能原因:远程服务器磁盘爆了

vscode输入密码后一直等待&#xff0c;无法进入远程服务器终端&#xff1a; 同时Remote-SSH输出包含以下内容 在日志中的以下几个部分&#xff1a; [17:15:05.529] > wget download failed 这表明VS Code尝试在远程服务器上下载VS Code服务器时失败了。> Cannot write…

iOS 解析闪退信息

记录通过xxx.app.dSYM文件解析16进制闪退信息 因为运营给到的闪退信息是.txt文本&#xff0c;而不是导出的.carsh文件&#xff0c;同时给到了出包的xxx.app.dsYM文件,为了查看具体的闪退日志&#xff0c;只能通过命令行转才能查看原因。(如果同时有给到.crash文件、.app文件、…

uniapp 路由跳转方式

export function goBack(index, url) {if (index 1) { // 关闭当前页&#xff0c;返回上一页面或多级页面。uni.navigateBack({delta: url,animationType: pop-out,animationDuration: 300});} else if (index 2) { // 保留当前页&#xff0c;跳转到非tabbar页面&#xff0c;…