LeetCode【15】三数之和

题目:

解析:

参考:https://zhuanlan.zhihu.com/p/111715985

代码:

java 复制代码
public static List<List<Integer>> threeSum(int[] nums) {

   // 先排序
    Arrays.sort(nums);

    List<List<Integer>> result = new ArrayList<>();

    for (int i = 0; i < nums.length - 2; i++) {   //注意这里优化,少算两个数,因为是三数之和
        int left = i + 1;
        int right = nums.length - 1;

        if (i > 0 && nums[i] == nums[i - 1]) {   // 注意,这里容易产生重复计算 -1、-1、0、1,结果里将产生两遍 -1、0、1,题目中明确不可以包含重复的三元组
            continue;
        }

        while (left < right) {
            if (nums[left] + nums[right] == (0 - nums[i])) {
                result.add(Arrays.asList(nums[i], nums[left], nums[right]));
                // 这里优化,减少重复计算
                while (left < right && nums[left] == nums[left + 1]) {
                    left++;
                }
                while (left < right && nums[right] == nums[right - 1]) {
                    right--;
                }
                // 还有可能凑成0,如 -4,-2,2,4
                left++;
                right--;
            } else if (nums[left] + nums[right] > (0 - nums[i])) {
                right--;
            } else {
                left++;
            }
        }
    }

    return result;
}
相关推荐
ZhengEnCi1 小时前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记2 小时前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
lizhongxuan3 小时前
AI小镇 - 涌现
算法·架构
AI工程架构师5 小时前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
祈安_6 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
归去_来兮19 小时前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling1 天前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱1 天前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
CoovallyAIHub2 天前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
木心月转码ing2 天前
Hot100-Day14-T33搜索旋转排序数组
算法