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

【重点】【双指针】15. 三数之和

题目
注意:三数之和属于双指针问题,二数之和属于哈希问题。

class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
        List<List<Integer>> res = new ArrayList<>();
        if (nums.length < 3) {
            return res;
        }
        Arrays.sort(nums);
        int i = 0, j, k;
        while (i < nums.length - 2) {
            j = i + 1;
            k = nums.length - 1;
            while (j < k) {
                if (nums[i] + nums[j] + nums[k] == 0) {
                    List<Integer> tmp = new ArrayList<>(Arrays.asList(nums[i], nums[j], nums[k]));
                    res.add(tmp);
                    ++j;
                    --k;
                    while (j < k && nums[j] == nums[j - 1]) {
                        ++j;
                    }
                    while (j < k && nums[k] == nums[k + 1]) {
                        --k;
                    }
                } else if (nums[i] + nums[j] + nums[k] > 0) {
                    --k;
                } else {
                    ++j;
                }
            } 
            ++i;
            while (i < nums.length && nums[i] == nums[i - 1]) {
                ++i;
            }
        }

        return res;
    }
}

http://www.kler.cn/a/155011.html

相关文章:

  • 【嵌入式开发】stm32 st-link 烧录
  • 聊一聊 CSS 样式的导入方式
  • SQL进阶实战技巧:用户会话内行为模式挖掘
  • 算法中的时间复杂度和空间复杂度
  • 2025最新 Docker 国内可用镜像源仓库地址(01月02日更新)
  • 【2024年华为OD机试】(A卷,200分)- 优雅子数组 (JavaScriptJava PythonC/C++)
  • Vue diff 算法探秘:如何实现快速渲染
  • Gson的用法详解
  • 中兴小鲜50 ZTE 畅行50 刷机救砖演示机7543n root 虎贲 展锐 T760 解锁BL
  • 人工智能 - 人脸识别:发展历史、技术全解与实战
  • 开源免费跨平台数据同步工具-Syncthing
  • Unity3D URP 自定义范围的特效热扭曲详解
  • LLM:《第 3 部分》从数学角度评估封闭式LLM的泛化能力
  • 安全SCDN对网站蜘蛛抓取有影响吗,使用SCDN对百度蜘蛛抓取有否好处
  • CentOS7 网络配置
  • Linux的权限(一)
  • Ubuntu22.04无需命令行安装中文输入法
  • C++生成静态库和动态库
  • 智慧用电安全动态监控系统
  • centos7-docker安装与使用
  • 网络虚拟化场景下网络包的发送过程
  • C/C++---------------LeetCode第35. 搜索插入位置
  • C++ day48 打家劫舍
  • 数学建模之典型相关分析
  • Redis--10--Pipeline
  • 乱序学机器学习——主成分分析法PCA