双指针算法:三数之和

文章目录


先赞后看,养成习惯!!!^ _ ^<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;
    }
};
相关推荐
用户901951824241 天前
【征文计划】基于 CXR-M SDK 打造 “AR 眼镜 + 手机” 户外步徒协同导航系统
算法
rengang661 天前
08-决策树:探讨基于树结构的分类和回归方法及其优缺点
人工智能·算法·决策树·机器学习·分类·回归
闻缺陷则喜何志丹1 天前
【剪枝 贪心 回溯】B4093 [CSP-X2021 山东] 发送快递|普及+
c++·算法·剪枝·贪心·洛谷
猫头虎1 天前
HAMi 2.7.0 发布:全面拓展异构芯片支持,优化GPU资源调度与智能管理
嵌入式硬件·算法·prompt·aigc·embedding·gpu算力·ai-native
漫漫不慢.1 天前
算法练习-二分查找
java·开发语言·算法
如竟没有火炬1 天前
LRU缓存——双向链表+哈希表
数据结构·python·算法·leetcode·链表·缓存
Greedy Alg1 天前
LeetCode 236. 二叉树的最近公共祖先
算法
爱吃生蚝的于勒1 天前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
兮山与1 天前
算法3.0
算法
爱编程的化学家1 天前
代码随想录算法训练营第27天 -- 动态规划1 || 509.斐波那契数列 / 70.爬楼梯 / 746.使用最小花费爬楼梯
数据结构·c++·算法·leetcode·动态规划·代码随想录