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

leetcode hot100刷题日记——37.三数之和

在这里插入图片描述
在这里插入图片描述
解答:
首先将nums进行排序,更方便做。
三元组三个数,可以看成如何取这三个数。
第一层循环:看着第一个数的指针。
第二层循环:看着第二个数的指针。
第三个数自然而然从数组的最后一个数字开始找满足-(num1+num2)的数字

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n=nums.size();sort(nums.begin(),nums.end());vector<vector<int>> ans;//i是第一个指针,指向三元组的第一个数for(int i=0;i<n;i++){//但是不能和之前的数相同,因为结果中不含有相同的三元组if(i>0&&nums[i]==nums[i-1]){continue;}//k指向三元组的第三个数int k=n-1;int target=-nums[i];//枚举三元组的第二个数for(int j=i+1;j<n;j++){// 需要和上一次枚举的数不相同if(j>i+1&&nums[j]==nums[j-1]){continue;}//需要保证第二个数在第三个数的左侧while(j<k&&nums[j]+nums[k]>target){--k;//如果后两个指针的和大于target,说明第三个数需要小一些}if(j==k){break;}if(nums[j]+nums[k]==target){ans.push_back({nums[i],nums[j],nums[k]});}}}return ans;}
};

时间复杂度:O(n^2)
空间复杂度:O(logn)(排序)

http://www.xdnf.cn/news/10817.html

相关文章:

  • 光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现
  • 网络安全运维实训室建设方案
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 攻防世界RE-1000Click
  • 深入理解 JSX:React 的核心语法
  • Java中并发修改异常如何处理
  • (四)动手实现多层感知机:深度学习中的非线性建模实战
  • 操作系统:生态思政
  • 系统设计面试利器:The System Design Primer开源项目介绍
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • SQL Indexes(索引)
  • 基于 NXP + FPGA+Debian 高可靠性工业控制器解决方案
  • Agent智能体应用教程系列(四):仅需几步,拥有自己专属的多agent智能体!
  • win11中使用grep
  • 小牛电动2025新品矩阵,引领技术普惠新风潮
  • 生产环境中安装和配置 Nginx 以部署 Flask 应用的详细指南
  • Windows Server部署Vue3+Spring Boot项目
  • Linux运维笔记:1010实验室电脑资源规范使用指南
  • Day38 训练
  • 服务端定时器的学习(一)
  • C#面试问题61-80
  • AgenticSeek:您的本地AI智能大脑,免费且私密
  • 线程相关面试题
  • 【leetcode】20. 有效的括号
  • ​链表题解——回文链表【LeetCode】
  • Go 为何天生适合云原生?
  • 前端下载文件,文件打不开的问题记录
  • 【数据分析】第四章 pandas简介(2)
  • AI与区块链:数据确权与模型共享的未来
  • recipes中声明 DEPENDS += “virtual/kernel“ 的效果