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

双指针7:LCR 007. 三数之和

链接:https://leetcode.cn/problems/1fGaJU/description/

题解:

先为数组升序排序,从前向后遍历数组,每次固定一个数,a+b+c=0,即a+b=-c即可,每次遍历时固定的数即是c。对固定数后面的数组部分进行双指针算法,left指向剩余数组部分的第一个位置,right指向最后一个位置,查找所有可能的情况使得left+right=-c,如果left+right<-c,说明left太小了,left++;如果left+right>-c,说明right太大了,right--;如果left+right=-c,说明找到一种情况,要继续查找可能的情况,left++,right--,直到left=right。此时还要去重,如果left / right的下一个指向数字和现在的相同,说明有重复情况,left++ / right--。

同样的去重操作还要在每次遍历时,固定的数字,如果下一次遍历时,仍然是相同的数字,同样要跳过。

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 target = -nums[i];
            int left = i + 1;
            int right = n - 1;
            while (left < right)
            {
                if (nums[left] + nums[right] > target) right--;
                else if (nums[left] + nums[right] < target) left++;
                else
                {
                    ans.push_back({ nums[left],nums[right],nums[i] });
                    while (left<right&&nums[left] == nums[left + 1]) left++;//去重
                    while (left<right&&nums[right] == nums[right - 1]) right--;//去重
                    left++;
                    right--;
                }
            }
        }
        return ans;
    }
};

相关文章:

  • C++智能指针weak_ptr
  • 从0开始的操作系统手搓教程24——完成我们的键盘驱动子系统
  • Ubuntu的软件源
  • 23种设计模式简介
  • 深入理解sync pool
  • 《深入浅出数据索引》- 大参林信息中心内部培训课程笔记
  • CefSharp 文件下载和保存功能-监听前端事件
  • Unity光照之Halo组件
  • 基于Spark的热门动漫推荐数据分析与可视化系统的设计与实现(采用Python语言Django框架,Hadoop,spider爬虫等技术实现)
  • 基于SpringBoot的智慧停车场小程序(源码+论文+部署教程)
  • 【科一】综合素质
  • 【轻松学C:编程小白的大冒险】---常量的定义、声明与应用场景 07
  • 13.数据结构(软考)
  • TypeError: Assignment to constant variable.
  • WebSocket:实现实时通信的利器
  • 【Bert系列模型】
  • 【记录一下学习】Embedding 与向量数据库
  • 结合rpart包的决策树介绍
  • 新疆美女演员吾热叶提正式加入创星演员出道计划,开启演艺事业新篇章
  • 【HeadFirst系列之HeadFirst设计模式】第17天之深入责任链模式:应对复杂请求处理的设计思路
  • 在线图片编辑像素/郑州seo服务
  • 做聊天网站的视频教程/推广营销是什么
  • 网站开发怎样实现上传视频教程/软件开发培训机构
  • 镇江个人网站建设/免费发布推广信息的平台有哪些
  • 网站建设商业阶段/沈阳关键词推广
  • 云南网站开发公司推荐/湖南网站设计