Hot100 - 三数之和

原题链接

本文讲解题目一种解法,遍历加双指针法。时间复杂度O(n2),空间复杂度O(log n)(不计算输入输出空间)

思路

看到这个题目容易让人想到两数之和,会想要使用类似的方法,确实如此。而且根据输入范围可知,时间复杂度至高可以达到 n2logn ,可以使用比较暴力的方法。

那么可以发现,如果固定一个数之后,就可以转换为两数之和了,又因为要求找到所有答案,所以使用双指针暴力查找就可以。

那么整体就应该是外层遍历第一个数,双指针查找后两个数,时间复杂度就是 n2。

实现

确定整体实现后,接下来就是考虑怎么具体实现了。

首先需要排序,然后每次遍历一个数,双指针范围就是这个数的右侧。

接下来是关键的去重,首先看为什么会有重复:存在相同的数,所有只需要跳过所有重复的数就可以。

那么具体就分两种,1 外层循环遍历时如果与前一个数字相同就跳过,2 内层循环当出现结果时,如果和下一个数相同就继续移动指针。

需要注意的比较中需要防止越界。

代码

cpp 复制代码
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        vector<vector<int>>ans;
        int n=nums.size();

        for(int i=0;i<n-2;i++){
            if (i > 0 && nums[i] == nums[i - 1]) continue;
            int l=i+1;
            int r=n-1;
            
            while(l<r){
                int sum=nums[l]+nums[r]+nums[i];
                if(sum==0){
                    ans.push_back({nums[i],nums[l],nums[r]});
                    while(l<r&&nums[l]==nums[l+1])l++;
                    while(l<r&&nums[r]==nums[r-1])r--;
                    l++;
                    r--;
                    
                }else if(sum>0){
                    r--;
                }else{
                    l++;
                }
                
            }
        }return ans;
    }
};

总结

这题就是一个双指针题目,但是需要注意去重,整体不难想。最开始我用的时单独变量存储,判断去重结果复杂而且漏查。

只要发现重复来源为重复数字,直接跳过就可以,然后就可以做出来了。

相关推荐
机器人零零壹2 小时前
技术白皮书:iRobotCAM如何解决机器人激光切割应用中的核心难点,从CAD离线编程到双目视觉定位与轨迹自适应提升复杂空间曲线切割的精度、效率与柔性化水平
人工智能·算法
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
ZhengEnCi4 小时前
大模型的分类到底怎么分:从基础模型到推理模型、从通用到专用的完整图谱
算法
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
罗西的思考5 小时前
【轻量化复刻大模型 / KIMI K3】KDA 模块交互式演示
人工智能·算法·机器学习
沫璃染墨7 小时前
从零入门计算机网络系列(十二):HTTP长连接与会话管理详解——从Connection到Cookie与Session
linux·服务器·c++·tcp/ip·ubuntu·http·交互
nm_zfyjt7 小时前
信息流广告投放优化实践:线索成本评估模型与转化链路重构(家装建材案例)
算法·重构·内蒙古朋友圈广告服务商·内蒙古朋友圈获客
xiaoye-duck8 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型
w_zero_one9 小时前
算法--构造
java·数据结构·算法
其实防守也摸鱼9 小时前
信创安全竞赛知识总结与题库
大数据·网络·人工智能·算法·安全·php