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

LeetCode 15 三数之和

题目链接

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目解析

        // 1. 排序+双指针

        // 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]

        // 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重

代码

class Solution 
{
public:vector<vector<int>> threeSum(vector<int>& nums) {// 1. 排序+双指针// 2. 固定一个值nums[i] 然后去剩下的位置去找 两数之和符合nums[j]+nums[k]是否等于-nums[i]// 3. 细节问题:由于题目中是不可以包含重复的三元组的,因此我们需要对我们所选的三个数进行去重int n=nums.size();sort(nums.begin(),nums.end());vector<vector<int>> vv;vector<int> v;for(int i=0;i<n;){int target=-nums[i];// 由于数组中的数据是升序的// 那么最小的数都是正数,那么后面的数都是正数// 因此就不可能会有三个数相加等于0if(nums[i]>0) break; // 当该值不符合情况直接跳出for循环int left=i+1,right=n-1;while(left<right){int sum=nums[left]+nums[right];if(sum<target){left++;}else if(sum>target){right--;}// 当走到该位置的时候,那么这三个数就是符合条件的else{v.clear();v.push_back(nums[i]); v.push_back(nums[left]); v.push_back(nums[right]);vv.push_back(v);// vv.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 vv;}
};

http://www.lryc.cn/news/157621.html

相关文章:

  • 车船边缘网关是如何给车辆船只定位的?
  • 详解MAC帧、ARP、DNS、ICMP协议
  • Leetcode:【169. 多数元素】
  • 好用免费的Chat GPT
  • MySQL-MHA
  • 初识Node.js与内置模块
  • NLP(1)--NLP基础与自注意力机制
  • Ubuntu 升级cuda版本与切换
  • 精讲算法的时间复杂度
  • java八股文面试[多线程]——newWorkStealingPool
  • STM32--RTC实时时钟
  • 【N2】例题学习笔记
  • 【数据分享】2006-2021年我国城市级别的道路、桥梁、管线建设相关指标(10多项指标)
  • 视觉SLAM14讲笔记-第7讲-视觉里程计2
  • MySQL——单行函数和分组函数
  • 百度百科词条怎么更新?怎么能顺利更新百科词条?
  • PPT怎么转换为PDF格式,收藏这两个在线工具。
  • 八大排序算法----堆排序
  • Docker Desktop 设置镜像环境变量
  • springboot之一:配置文件(内外部配置优先顺序+properties、xml、yaml基础语法+profile动态切换配置、激活方式)
  • 涛然自得周刊(第 5 期):蝲蛄吟唱的地方
  • Android Ble蓝牙App(七)扫描过滤
  • 小程序当前页面栈以及跳转
  • jQuery获取表单的值val()
  • 【专栏必读】数字图像处理(MATLAB+Python)专栏目录导航及学习说明
  • 2023年非证券类投资银行业发展报告
  • Matlab 如何把频谱图的纵坐标设置为分贝刻度
  • VUE写后台管理(2)
  • RHCSA8.2
  • 修改linux中tomcat的端口