算法日记-LeetCode-18.四数之和
题目大意
给定一个无序数组nums,以及目标值target,请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]]
0 <= a < b < c< d < n
nums[a] + nums[b] + nums[c] + nums[d] = target
解题思路
循环
最直接的解决方法就是通过四重循环,但是四重循环的时间复杂度高,会超时
排序 + 双指针
四数之和与三数之和类型,可以通过,排序+双指针的方式,减少一重循环
对数组进行排序,然后通过两重循环确定nums[a],nums[b]
随后借助双指针left和right确定nums[c]和nums[d]
sum = nums[left] + nums[right]
nums[a] + nums[b] + sum == target 满足条件
nums[a] + nums[b] + sum > target 右指针左移
nums[a] + nums[b] + sum < target 左指针右移
代码如下
class Solution { |
0ms 范例
import java.util.*; |
- 本文作者: Naskete
- 本文链接: https://Naskete.github.io/2023/07/15/algorithm/算法日记-LeetCode-18.四数之和/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!