LeetCode:三数之和

java 复制代码
class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        //盛放最终的结果
        List<List<Integer>> result = new ArrayList<>();
        //先进行排序
        Arrays.sort(nums);
        //对元素进行遍历,我们转换成  -nums[i] = nums[left] + nums[right]的形式,-nums[i]作为要拼的元素始终在后面两个元素前面
        //由于要给后面两个元素留位置所以i < nums.length - 2
        for(int i = 0;i < nums.length - 2;i++){
            //如果当前元素大于0;后面的元素都比他大,不可能有两个元素加到一起等于它了
            if(nums[i] > 0){
                break;
            }
            //去重
            if(i > 0 && nums[i] == nums[i - 1]){
                continue;
            }

            int left = i + 1;
            int right = nums.length - 1;
            while(left < right){
                int sum = nums[i] + nums[left] + nums[right];

                if(sum == 0){
                    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--;
                    }
                    left++;
                    right--;
                }else if(sum < 0){
                    left++;
                }else{
                    right--;
                }
            }
        }
        return result;
    }
}

Arrays.sort(nums):对nums数组排序,使用快速排序算法,时间复杂度O(NLogN)

Arrays.asList(...):将零散的元素装进集合

相关推荐
wanderist.2 小时前
线性筛法详解:从筛质数到欧拉函数、Möbius 函数与约数函数
java·数据结构·算法
All for pursuit.2 小时前
【设计-1】208.实现Trie (前缀树)
数据结构·c++·算法·leetcode
weixin_307779132 小时前
C++代码实现MATLAB中的crossval函数功能
开发语言·c++·算法·matlab
青少儿编程课堂3 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
光影少年3 小时前
为什么 JavaScript 中 0.1 + 0.2 !== 0.3,如何让其相等?
前端·javascript·算法
HEJOO93 小时前
Linux 设备驱动系列——使用全局工作队列
java·linux·算法
Code_Solitude3 小时前
c语言:递归
java·c语言·算法
edtoplort4 小时前
OpenAI紧急叫停GPT-6.1 Astra训练,奥尔特曼为何踩刹车
人工智能·gpt·算法
蒜香可达鸭4 小时前
让视频生成流水线跑不崩:一个事件溯源的多 Agent 可靠执行框架
算法
小羊没烦恼!5 小时前
系统内部模块(子系统)之间的耦合以及模块(子系统)划分
java·开发语言·前端·数据库·算法·c#