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

LeetCode15:三数之和

  1. 首先对数组进行排序,这是使用双指针技术的前提,也有助于去重
  2. 固定第一个元素(i位置),然后用左右双指针寻找另外两个元素
  3. 通过三数之和与0的比较来移动指针:
    • 和为0时,记录结果并跳过重复元素
    • 和小于0时,右移左指针增大总和
    • 和大于0时,左移右指针减小总和
  4. 利用排序后的特性,通过比较相邻元素跳过重复解

算法的时间复杂度为O(n²),其中排序占O(n log n),主体双指针遍历占O(n²);空间复杂度为O(1)(不包括存储结果的空间)。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class ThreeSum {public List<List<Integer>> threeSum(int[] nums) {// 创建结果列表List<List<Integer>> result = new ArrayList<>();// 处理边界情况if (nums == null || nums.length < 3) {return result;}// 排序数组,便于去重和双指针操作Arrays.sort(nums);// 遍历每个可能的第一个元素for (int i = 0; i < nums.length - 2; i++) {// 跳过重复的第一个元素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) {// 和小于0,需要增大总和,移动左指针left++;} else {// 和大于0,需要减小总和,移动右指针right--;}}}return result;}// 测试方法public static void main(String[] args) {ThreeSum solution = new ThreeSum();// 测试用例int[][] testCases = {{-1, 0, 1, 2, -1, -4},{},{0},{0, 0, 0}};// 输出测试结果for (int[] testCase : testCases) {System.out.println("输入: " + Arrays.toString(testCase));System.out.println("输出: " + solution.threeSum(testCase));System.out.println();}}
}
http://www.xdnf.cn/news/1479907.html

相关文章:

  • 《MATLAB 批量把振动 CSV(含中文“序号/采样频率”)稳健转成 .mat:自动解析+统一换算+按 H/I/O/F-rpm-fs-load 命名》
  • WIN10+ubuntu22.04.05双系统装机教程
  • 基于STM32F103C8T6的心率与体温监测及报警显示系统设计
  • 如何在 FastAPI 中巧妙覆盖依赖注入并拦截第三方服务调用?
  • vue + ant-design-vue + vuedraggable 实现可视化表单设计器
  • 用 PHP 玩向量数据库:一个从小说网站开始的小尝试
  • 多维度数据统一线性处理的常见方案
  • 鸿蒙libxm2交叉编译
  • (2)桌面云、并行计算、分布式、网格计算
  • LeetCode5最长回文子串
  • 基于Spark的中文文本情感分析系统研究
  • 空间配置器
  • 【STM32HAL-----NRF24L01】
  • leetcode LCR 159 库存管理III
  • Qt网络通信服务端与客户端学习
  • 第5章递归:分治法
  • Qt文字滚动效果学习
  • MySQL 高可用方案之 MHA 架构搭建与实践
  • 常用配置文件
  • 去中心化投票系统开发教程 第三章:智能合约设计与开发
  • [网络入侵AI检测] docs | 任务二分类与多分类
  • 算法题-链表03
  • react native 出现 FATAL EXCEPTION: OkHttp Dispatcher
  • LeetCode 2841.几乎唯一子数组的最大和
  • AI智能体架构全流程全解析
  • [光学原理与应用-432]:非线性光学 - 既然光也是电磁波,为什么不能直接通过电生成特定频率的光波?
  • 打造一款高稳定、低延迟、跨平台RTSP播放器的技术实践
  • 基于FPGA的电梯控制系统设计(论文+源码)
  • 动态内存分配
  • DeepSeek辅助在64位Linux中编译运行32位的asm-xml-1.4程序