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

力扣--双指针15.三数之和

详细思路

  1. 排序数组:首先对数组 nums 进行排序,目的是为了方便后续使用双指针查找和避免重复结果。
  2. 遍历数组:使用一个 for 循环从头遍历到倒数第三个元素。i 表示当前固定的元素。
    • 跳过重复元素:如果当前元素 nums[i] 与前一个元素相同,则跳过,避免重复结果。
    • 提前结束循环:如果当前元素 nums[i] 大于0,因为数组已经排序,后面的元素也都大于0,不可能存在满足条件的三元组,直接结束循环。
  3. 双指针查找:对于每个固定的元素 nums[i],使用双指针在其后的子数组中查找两个数 nums[j]nums[k],使得它们的和为 -nums[i]
    • 调整指针:根据当前三数之和调整双指针的位置:
      • 如果和大于0,说明右边的数太大,右指针 k 左移。
      • 如果和小于0,说明左边的数太小,左指针 j 右移。
      • 如果和等于0,则找到一个满足条件的三元组,将其加入结果,并跳过重复的元素。
  4. 返回结果:所有符合条件的三元组都存储在 result 中,最终返回该结果。

通过这种方法,可以在时间复杂度为 O(n^2) 的情况下找到所有不重复的满足条件的三元组。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result; // 用于存储结果三元组int n = nums.size();if (n <= 2)return result; // 如果数组长度小于等于2,不可能有满足条件的三元组,直接返回空结果sort(nums.begin(), nums.end()); // 将数组排序// 遍历数组,每次固定一个元素for (int i = 0; i <= n - 3; i++) {if (i > 0 && nums[i] == nums[i - 1]) {continue; // 跳过重复的元素,以避免结果中有重复的三元组}if (nums[i] > 0)break; // 如果当前固定的数大于0,由于数组已经排序,后面的数也大于0,不可能找到满足条件的三元组int j = i + 1, k = n - 1; // 初始化双指针,一个从左边开始,一个从右边开始while (j < k) {int sum = nums[i] + nums[j] + nums[k];if (sum > 0) {k--; // 如果三数之和大于0,移动右指针向左} else if (sum < 0) {j++; // 如果三数之和小于0,移动左指针向右} else {// 找到一个满足条件的三元组result.push_back({nums[i], nums[j], nums[k]});// 跳过重复的元素while (j < k && nums[j] == nums[j + 1]) j++;while (j < k && nums[k] == nums[k - 1]) k--;j++;k--;}}}return result; // 返回结果}
};

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

相关文章:

  • C++ A (1020) : 幂运算
  • GVM: Golang多版本管理利器
  • AlmaLinux9安装zabbix6.4
  • 基于翔云C#语言的身份证实名认证接口开发示例
  • MySQL中的redo log 和 undo log
  • net/http与gin框架的关系分析
  • Docker的安装、启动和配置镜像加速
  • Linux系统下+jmeter分布式压测
  • 点点点还有没有做下去的必要
  • uni-app增加home图标,实现回到功能主页(九)
  • Android关闭硬件加速对PorterDuffXfermode的影响
  • 排序-插入排序与选择排序
  • 【前端每日基础】day33——响应式布局
  • leetcode 2981.找出出现至少三次的最长子特殊字符串(纯哈希表暴力)
  • 集成算法实验与分析(软投票与硬投票)
  • 网络数据库后端框架相关面试题
  • 模拟集成电路(6)----单级放大器(共源共栅级 Cascode Stage)
  • docker以挂载目录启动容器报错问题的解决
  • MySQL—函数—流程控制函数(基础)
  • 2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷7(私有云)
  • Jenkins、GitLab部署项目
  • 21.Redis之分布式锁
  • Mysql基础学习:mysql8 JSON字段查询操作
  • 搭建基于Django的博客系统数据库迁移从Sqlite3到MySQL(四)
  • 24年护网工具,今年想参加护网的同学要会用
  • 解决TrueNas Scale部署immich后人脸识别失败,后台模型下载异常,immich更换支持中文搜索的CLIP大模型
  • 面试高频问题----2
  • Nginx的配置文件-详细使用说明
  • YOLOv5改进 | 卷积模块 | 提高网络的灵活性和表征能力的动态卷积【附代码+小白可上手】
  • 23、linux系统文件和日志分析