大家好这篇分享LeetCode 15 三数之和的标准最优解法——排序 三指针代码极简、逻辑清晰直接可背可提交。核心思路先给数组排序才能用双指针高效查找固定一个指针i作为第一个数转化为在i右侧找两数之和 -nums[i]用左指针 j、右指针 k双向夹逼快速找到符合条件的三元组全程去重避免结果重复完整代码每步都有详细的注释varthreeSumfunction(nums){constres[] nums.sort((a,b)a-b);constlennums.length;// 2. 固定第一个数 i遍历到倒数第三个数即可for(leti0;ilen-2;i){// 去重i 与前一个数相同跳过if(i0nums[i]nums[i-1])continue;// 3. 定义双指针j 从 i1 开始k 从末尾开始letji1,klen-1;// 4. 双指针夹逼while(jk){constsumnums[i]nums[j]nums[k];// 找到和为 0 的三元组if(sum0){res.push([nums[i],nums[j],nums[k]]);// j 去重while(jknums[j]nums[j1])j;// k 去重while(jknums[k]nums[k-1])k--;// 找到后同时移动两个指针j;k--;}// 和太小 → 左指针右移增大值elseif(sum0)j;// 和太大 → 右指针左移减小值elsek--;}}returnres;};关键步骤总结排序让数组有序支持双指针固定 i把三数之和转为两数之和j、k 夹逼一次遍历找到目标组合三处去重i、j、k 分别跳过重复元素保证结果唯一