双指针算法:三数之和

文章目录


先赞后看,养成习惯!!!^ _ ^<3 ❤️ ❤️ ❤️
码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!
所属专栏:双指针算法

一、题目链接:三数之和

二、思路讲解

方法一:暴力求解

我们只需要遍历所有情况即可得到所有结果,然后去重,由于时间复杂度比较高,过不了需要优化(O(3*n^3))

方法二:找规律

1.我们首先sort迭代器进行排序

2.排完序后我们开始遍历

3.如果从i=0开始遍历,left=i+1,right=n-1

4.优化:判断nums[i]是否大于0,大于0,后面的数都是单增的就直接break跳出

5.取nums[i]的相反数sum,判断sum和a[left]+a[right]的大小关系,如果sum大于a[left]+a[right],那么left++,小于的话就right--,同时要满足left<right

6.为了去重,判断下一个left和前一个left是否相同,下一个right和前一个right是否相同,相同就继续向前走,i也是

7.时间复杂度O(n^3+nlogn)

三、代码演示

cpp 复制代码
class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> arr;
        sort(nums.begin(),nums.end());
        int i = 0,n = nums.size();
        for(i=0;i<n;)
        {
            if(nums[i]>0)
            break;
            int left = i+1,right = n-1,target = -nums[i];
            while(left<right)
            {
                int sum = nums[left]+nums[right];
                if(sum>target) right--;
                else if(sum<target) left++;
                else
                {
                    arr.push_back({nums[i],nums[left],nums[right]});
                    left++,right--;

                    while(left<right&&nums[left]==nums[left-1]) left++;
                    while(left<right&&nums[right]==nums[right+1]) right--;

                }
            }
            i++;
            while(i<n&&nums[i]==nums[i-1]) i++;
        }
        return arr;
    }
};
相关推荐
梁下轻语的秋缘36 分钟前
每日c/c++题 备战蓝桥杯 ([洛谷 P1226] 快速幂求模题解)
c++·算法·蓝桥杯
CODE_RabbitV40 分钟前
【深度强化学习 DRL 快速实践】逆向强化学习算法 (IRL)
算法
mit6.8241 小时前
[贪心_7] 最优除法 | 跳跃游戏 II | 加油站
数据结构·算法·leetcode
keep intensify1 小时前
通讯录完善版本(详细讲解+源码)
c语言·开发语言·数据结构·算法
shix .1 小时前
2025年PTA天梯赛正式赛 | 算法竞赛,题目详解
数据结构·算法
风铃儿~2 小时前
Java面试高频问题(26-28)
java·算法·面试
wuqingshun3141592 小时前
蓝桥杯 4. 卡片换位
算法·职场和发展·蓝桥杯
江沉晚呤时2 小时前
深入了解C# List集合及两种常见排序算法:插入排序与堆排序
windows·sql·算法·oracle·c#·排序算法·mybatis
Eric.Lee20212 小时前
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
人工智能·算法·yolo·目标检测·计算机视觉
Gsen28192 小时前
AI大模型从0到1记录学习 数据结构和算法 day20
数据结构·学习·算法·生成对抗网络·目标跟踪·语言模型·知识图谱