leetcode中如何解决三数之和问题
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,小编给大家分享一下leetcode中如何解决三数之和问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!题目链接https:
千家信息网最后更新 2025年01月31日leetcode中如何解决三数之和问题
小编给大家分享一下leetcode中如何解决三数之和问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
题目链接
https://leetcode-cn.com/problems/3sum/
题目描述
给定一个包含 n
个整数的数组 nums
,判断 nums
中是否存在三个元素 a,b,c
,使得 a + b + c = 0
?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
解题方案
思路
标签:数组遍历
首先对数组进行排序,排序后固定一个数nums[i],再使用左右指针指向nums[i]后面的两端,数字分别为nums[L]和nums[R],计算三个数的和sum判断是否满足为0,满足则添加进结果集
如果nums[i]大于0,则三数之和必然无法等于0,结束循环
如果nums[i] == nums[i-1],则说明该数字重复,会导致结果重复,所以应该跳过
当sum == 0时,nums[L] == nums[L+1]则会导致结果重复,应该跳过,L++
当sum == 0时,nums[R] == nums[R-1]则会导致结果重复,应该跳过,R--
时间复杂度:O(n^2),n为数组长度
代码
Java版本
class Solution {
public static List> threeSum(int[] nums) {
List> ans = new ArrayList();
Arrays.sort(nums); // 排序
int len = nums.length;
if(nums == null || len < 3) return ans;
for (int i = 0; i < len ; i++) {
if(nums[i] > 0) break; // 如果当前数字大于0,则三数之和一定大于0,所以结束循环
if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
int L = i+1;
int R = len-1;
while(L < R){
int sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
ans.add(Arrays.asList(nums[i],nums[L],nums[R]));
while (L while (L L++;
R--;
}
else if (sum < 0) L++;
else if (sum > 0) R--;
}
}
return ans;
}
}
JavaScript版本
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
let ans = [];
nums.sort((a, b) => a - b); // 排序
const len = nums.length;
if(nums == null || len < 3) return ans;
for (let i = 0; i < len ; i++) {
if(nums[i] > 0) break; // 如果当前数字大于0,则三数之和一定大于0,所以结束循环
if(i > 0 && nums[i] == nums[i-1]) continue; // 去重
let L = i+1;
let R = len-1;
while(L < R){
const sum = nums[i] + nums[L] + nums[R];
if(sum == 0){
ans.push([nums[i],nums[L],nums[R]]);
while (L while (L L++;
R--;
}
else if (sum < 0) L++;
else if (sum > 0) R--;
}
}
return ans;
};
画解
以上是"leetcode中如何解决三数之和问题"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
之和
数组
数字
结果
排序
篇文章
三元
循环
问题
个数
内容
版本
题目
复杂
三个
不怎么
两端
代码
元素
复杂度
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
梦想网络安全教育
手机软件开发的利与弊
软件开发规范有哪些
女生学网络技术专业
网络技术职位岗位分析
discuz 数据库字段
常州高性能服务器供应商家
文件服务器共享会自动关闭
临沂网络技术有限公司招聘
明日之后打开数据库
《广西网络安全知识竞赛》
S6手表设置蜂窝网与服务器中断
净化网络安全手抄报的30字
数据库emp表怎么恢复
卫辉软件开发系列
未来科技城互联网公司企业名单
软件开发团队管理团队
盐城移动网络技术专家王朝阳
数据库查看表是否有锁
藏宝地图我的世界服务器
深圳软件开发cto年薪一般多少
门禁系统怎么登数据库
关系数据库的三类完整性含义
我的世界服务器能安mod吗
数据库演示软件
最便宜的软件开发老师
文件上传服务器位置
sql数据库中查看表格信息
青浦区技术软件开发中心收费
软件开发学生