15. 三数之和

type
status
date
slug
summary
tags
category
difficulty
icon
password

15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
示例 1:
示例 2:
示例 3:
提示:
  • 3 <= nums.length <= 3000
  • 105 <= nums[i] <= 105
解题思路:
  1. 首先对数组进行排序,这样可以方便去重和使用双指针
  1. 使用三重循环,其中:
      • 第一重循环i遍历数组,作为第一个数
      • 第二重循环j从i+1开始,作为第二个数
      • 第三重循环k从数组末尾开始,作为第三个数
  1. 去重处理:
      • 对第一个数nums[i],跳过重复值
      • 对第二个数nums[j],跳过重复值
  1. 优化:当k向左移动时,如果nums[i] + nums[j] + nums[k-1] >= 0,说明k还可以继续左移
  1. 当找到nums[i] + nums[j] + nums[k] == 0时,将这三个数加入结果集
时间复杂度分析:
  • 排序时间:O(nlogn)
  • 双指针遍历时间:O(n²)
  • 总时间复杂度:O(n²)
空间复杂度:O(1),除了存储答案的空间外,只需要常数级的额外空间
 
上一篇
42. 接雨水
下一篇
JVM-Sandbox 流量回放

评论
Loading...