leetcode15.三数之和题解:逻辑清晰带你分析

介绍


题源

分析

1.双指针+固定一个数

首先明白一点,我们有三个数,我们想使用双指针,那就必须固定一个数。

2.二分

本题还涉及二分,双指针经常和二分结合使用(二分本质就是双指针,仔细思考这思考这句话),所以我们要在一开始先排序。

3.去重

题目要求答案不可包含重复的三元组,那么就必须考虑去重。

又分两种情况:

1.对固定的数来说,用当前数和前一个数比较,相同直接跳过本次了。

2.对后两个数,只需要考虑当双指针找到了一次对应目标后,把可能重复的数字跳过去。

明确了思路,代码就非常好写了。

cpp代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        //一是固定数+双指针,二是二分,三是去重  
        vector<vector<int>> res;
        if(nums.size()<3) return res;
        sort(nums.begin(),nums.end());
        for(int i=0;i<nums.size();i++)
        {
            if(nums[i]>0) break;
            if(i>0&&nums[i]==nums[i-1]) continue;
            int j=i+1,k=nums.size()-1;
            while(j<k)
            {
                if(nums[i]+nums[j]+nums[k]==0) 
                {
                    res.push_back({nums[i],nums[j],nums[k]});
                    while(j<k && nums[j]==nums[j+1]) j++;
                    while(j<k && nums[k]==nums[k-1]) k--;
                    j++;
                    k--;
                }
                else if(nums[i]+nums[j]+nums[k]<0)
                {
                    j++;
                }
                else
                {
                    k--;
                }
            }
        }
        return res;
    }
};

流程

是 否 指针相遇 未相遇 和小 和大 开始 输入数组 数组排序 固定第一个数 双指针查找 找到解? 保存结果 继续查找 固定下一数 判断和大小 左指针右移 右指针左移

相关推荐
IsSh9nj6q24 分钟前
Python全栈应用搭建神器magic-dash .新版本介绍
开发语言·python·dash
啦啦啦啦啦zzzz36 分钟前
设计模式:建造者模式
c++·设计模式·建造者模式
软件技术NINI42 分钟前
盗墓笔记html+css+js 2页
css·笔记·html
Cachel wood1 小时前
hands-on-modern-rl:动手学强化学习策略梯度reinforce
开发语言·python
wuminyu1 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法
蓝斯4971 小时前
一碰即传,重构跨设备文件分享体验
开发语言·python·重构
宁风NF1 小时前
JavaScript:内存、垃圾回收、性能优化
开发语言·前端·javascript·学习·性能优化·es6
智者知已应修善业1 小时前
【用D触发器组成000-001-010-011-100】2025-6-7
驱动开发·经验分享·笔记·硬件架构·硬件工程
圣保罗的大教堂1 小时前
leetcode 3016. 输入单词需要的最少按键次数 II 中等
leetcode
编程圈子1 小时前
电机驱动开发学习22. 霍尔电角度标定(自动/手动标定与Flash固化)
驱动开发·学习