当然可以!下面是这道题(LeetCode 18: 四数之和)的思路总览模板答案,适用于笔试、面试或者写题解时的标准答题格式👇
🧩 LeetCode 18. 四数之和 —— 思路总览模板答案
✅ 题目描述简要
给定一个整数数组 nums
和一个目标值 target
,找出所有不重复的四元组 [a, b, c, d]
,使得:
nums[a] + nums[b] + nums[c] + nums[d] == target
要求:
- 四元组元素的下标不重复
- 四元组值不能重复(顺序无关)
🔍 解题思路
1. 排序数组
首先将数组 nums
升序排序,便于后续使用双指针,并且方便跳过重复元素。
2. 枚举前两个数 + 双指针找后两个数
- 固定前两个数
nums[i]
和nums[j]
- 在剩余部分使用双指针
left
和right
,寻找符合条件的另外两个数
3. 跳过重复元素
- 对于每一层循环(i, j)和每次指针移动(left, right),都要跳过相同的数值,确保不出现重复的四元组
4. 使用 long 防止整型溢出
nums[i] + nums[j] + nums[left] + nums[right]
可能超出int
范围,因此建议用long
存储临时和
🧠 算法复杂度
-
时间复杂度:O(n³)
三重循环(两层 + 双指针)枚举所有可能组合 -
空间复杂度:O(1)
只用了常数级额外空间(不算返回结果)
💡 关键技巧总结
- 排序数组:便于双指针和去重操作
- 双指针:利用有序数组快速找到两数之和
- 去重处理:防止重复答案(i、j、left、right层层去重)
- long 类型:规避溢出风险
java solution
class Solution {
public List<List<Integer>> fourSum(int[] nums, int target) {
List<List<Integer>> result = new ArrayList<>();
//首先进行排序
Arrays.sort(nums);
int n = nums.length;
for(int i = 0; i < n - 3; i++) {
//先确定第一个数
if(i > 0</