当前位置: 首页 > article >正文

【力扣】15.三数之和

AC截图

题目

思路

这道题如果简单的用暴力三重遍历去做,会超时。所以我们思考假如有三个下标,i,l,r

其中i=0(初始),l=i+1 r=nums.size()-1

我们固定nums[i]的值,那么就转换为两数之和,我们需要找到nums[l]+nums[r]==-nums[i]

假如我们对数组排序,那么记target=-nums[i],sum=nums[l]+sum[r]

①如果sum==target,即为所求,l++,r--

②如果sum<target,为了得到更大的sum,只能l++

③如果sum>target,为了减小sum,只能r--

接下来,就是一些剪枝操作。比如数组中存在重复的数字,就需要跳过。

①假如已经有sum==target并且进行了l++,r--

此时如果存在与sum[l]或者sum[r]相同的值,必然得到的是相同的数组,就需要使用l++或者r--跳过

②如果出现了num[i]值重复,由于上一个循环已经得到了所有的序列,此时也应给使用continue跳过

代码

class Solution {
public:
    vector<vector<int>> threeSum(vector<int>& nums) {
        vector<vector<int>> res;

        sort(nums.begin(),nums.end());

        for(int i=0;i<nums.size();i++){
            if(i>0 && nums[i]==nums[i-1]) continue;
            int l=i+1;
            int r=nums.size()-1;
            int target = -nums[i];
            while(l<r){
                int sum = nums[l]+nums[r];
                if(sum==target){
                    res.push_back({nums[i],nums[l],nums[r]});
                    l++;
                    r--;

                    while(l<r && nums[l]==nums[l-1]){
                        l++;
                    }
                    while(l<r && nums[r]==nums[r+1]){
                        r--;
                    }
                }else if(sum>target){
                    r--;
                }else{
                    l++;
                }

            }
        }
        return res;
    }
};


http://www.kler.cn/a/529201.html

相关文章:

  • nacos 配置管理、 配置热更新、 动态路由
  • Microsoft Power BI:融合 AI 的文本分析
  • Windows系统中Docker可视化工具对比分析,Docker Desktop,Portainer,Rancher
  • Java线程认识和Object的一些方法ObjectMonitor
  • oracle: 多表查询之联合查询[交集intersect, 并集union,差集minus]
  • litemall,又一个小商场系统
  • 网络编程套接字(下)
  • CSS 样式化表格:从基础到高级技巧
  • 快速提升网站收录:利用网站FAQ页面
  • 人工智能入门课【手写自注意力机制】
  • 【回溯】目标和 字母大小全排列
  • 云服务器与Docker
  • 分布式事务组件Seata简介与使用,搭配Nacos统一管理服务端和客户端配置
  • 【华为OD-E卷 - 报数游戏 100分(python、java、c++、js、c)】
  • doris:JSON导入数据
  • Games104——引擎工具链基础
  • Python的那些事第八篇:Python中的类与对象
  • MusicFree-开源的第三方音乐在线播放和下载工具, 支持歌单导入[对标落雪音乐]
  • Nginx知识
  • 什么是Javascript,有什么特点
  • 【cocos官方案例改】跳跃牢猫
  • 【VUE】简述Vue中mixin、extends 的覆盖逻辑
  • NLP深度学习 DAY5:Sequence-to-sequence 模型详解
  • MySQL复制扩展功能
  • AI基本概念之——张量(Tensor)
  • 遗传算法与深度学习实战(33)——WGAN详解与实现