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

[三数之和]

在这里插入图片描述

思路分析

1. 排序预处理
sort(nums.begin(), nums.end());
  • 目的:将数组升序排序,便于后续双指针操作和去重。
  • 作用
    • 方便固定一个数后,用双指针快速寻找另外两个数。
    • 相同数字相邻排列,便于跳过重复值。

2. 外层循环固定第一个数
for (int i = 0; i < n - 2; i++) {if (i > 0 && nums[i] == nums[i - 1]) {continue; // 跳过重复的 nums[i]}int target = -nums[i]; // 转化为两数之和问题// ...
}
  • 去重逻辑
    • 如果 nums[i] 与前一个数 nums[i-1] 相同,直接跳过,避免重复解。
  • 目标转换
    • 将三数之和问题转化为两数之和问题:nums[j] + nums[k] = target = -nums[i]

3. 内层双指针寻找两数之和
int j = i + 1, k = n - 1;
while (j < k) {if (nums[j] + nums[k] < target) {j++; // 和太小,左指针右移} else if (nums[j] + nums[k] > target) {k--; // 和太大,右指针左移} else {res.push_back({nums[i], nums[j], nums[k]});// 内层去重:跳过重复的 nums[j] 和 nums[k]while (j < k && nums[j] == nums[j + 1]) j++;while (j < k && nums[k] == nums[k - 1]) k--;j++;k--;}
}
  • 双指针移动规则
    • 和太小:左指针 j 右移(增大和)。
    • 和太大:右指针 k 左移(减小和)。
    • 匹配成功:记录解,并跳过所有重复的 nums[j]nums[k]
  • 去重逻辑
    • 在找到有效解后,跳过所有与当前 nums[j]nums[k] 相同的值,避免重复解。
class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {int n=nums.size(); vector<vector<int>> res;sort(nums.begin(),nums.end());for(int i=0;i<n-2;i++){   if(i>0&&nums[i-1]==nums[i]){continue;}int a=-nums[i];int j=i+1,k=n-1;while(j<k){if(nums[j]+nums[k]<a){j++;}else if(nums[j]+nums[k]>a){k--;}else{  res.push_back({nums[i],nums[j],nums[k]});while(j<k&&nums[j+1]==nums[j]){j++;}while(j<k&&nums[k-1]==nums[k]){k--;}j++;k--;}}}return res;}
};
http://www.dtcms.com/a/319947.html

相关文章:

  • [安卓按键精灵开发工具]本地数据库的初步学习
  • Day116 若依融合mqtt
  • Minio 分布式集群安装配置
  • 28 HTB Forest 机器 - 容易 (1)
  • (附源码)基于Web的物流信息管理系统
  • 解锁webpack核心技能(二):配置文件和devtool配置指南
  • 机器学习在量化中的应用:如何从逻辑回归到XGBoost实现高效预测?
  • 将Excel数据导入SQL Server数据库,并更新源表数据
  • 河南萌新联赛2025第(四)场:河南大学(补题)
  • 北京JAVA基础面试30天打卡04
  • 一文入门 matplotlib:从基础图表到数据可视化初体验
  • git branch -a无法查看最新的分支
  • CNB私有化部署Dify(零成本)教程
  • 操作系统1.4:操作系统的体系结构
  • ollama 运行gpt-oss 系列教程
  • Numpy科学计算与数据分析:Numpy数组创建与应用入门
  • DevOps简单教程应用
  • ⭐CVPR2025 RoboBrain:机器人操作的统一大脑模型[特殊字符]
  • Redis(八):Redis高并发高可用(哨兵Sentinel)
  • 上海一家机器人IPO核心零部件依赖外购, 募投计划频繁修改引疑
  • QDataStream入门
  • Redis实战(8) -- 分布式锁Redission底层机制
  • 如何解决用阿里云效流水线持续集成部署Nuxt静态应用时流程卡住,进行不下去的问题
  • 基于 MATLAB 的 QPSK 调制、解调、通过高斯信道的误码率计算,并绘制误码率图和眼图、星座图
  • 火山引擎接入豆包AI(纯前端调用api的方式)
  • Java 大视界 -- Java 大数据在智能教育在线课程互动优化与学习体验提升中的应用(386)
  • E频段芯片解决方案
  • npm 与 npx 区别详解。以及mcp中npx加载原理。
  • 2025年生成式大模型部署与推理优化全景解析
  • 14天搞定Excel公式:告别加班,效率翻倍!