算法日记-LeetCode-15-三数之和
题目大意
给定一个无序数组,数组长度[3, 3000],求出所有满足nums[i] + nums[j] + nums[k] = 0的三元组,且i != j, j != k。
示例:
输入:nums = [-1,0,1,2,-1,-4] |
解题思路
循环
通过三重循环遍历数组,找到满足条件的值,三重循环容易超时
排序 + 双指针
首先对数组进行排序,排序后可采用双指针的方式缩小范围得到目标值。
对排序后的数组进行遍历,如果nums[idx] > 0,则之后肯定不存在满足条件的值,此时可以直接返回结果,且题目要求不重复,故需要对重复的元素进行跳过。
从i开始,令left = idx + 1, rigth = n - 1,则存在以下三种情况:
nums[idx] + nums[left] + nums[right] = 0 : 即为目标解
nums[idx] + nums[left] + nums[right] > 0 : nums[right] 过大, right 左移;
nums[idx] + nums[left] + nums[right] < 0 : nums[left] 过小, left 右移
直到left与right相遇。
代码
class Solution { |
- 本文作者: Naskete
- 本文链接: https://Naskete.github.io/2023/07/09/algorithm/算法日记-LeetCode-15.三数之和II/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!