leetcode第18题

简介: top18和3Sum类似,只不过是找四个数,使得和为 target,并且不能有重复的序列。如果之前没有做过3Sum可以先看看,自己在上边的基础上加了一个循环而已。

image.png

top18

3Sum类似,只不过是找四个数,使得和为 target,并且不能有重复的序列。

如果之前没有做过3Sum可以先看看,自己在上边的基础上加了一个循环而已。

publicList<List<Integer>>fourSum(int[] num, inttarget) {
Arrays.sort(num);
List<List<Integer>>res=newLinkedList<>();
//多加了层循环for (intj=0; j<num.length-3; j++) {
//防止重复的if (j==0|| (j>0&&num[j] !=num[j-1]))
for (inti=j+1; i<num.length-2; i++) {
//防止重复的,不再是 i == 0 ,因为 i 从 j + 1 开始if (i==j+1||num[i] !=num[i-1]) {
intlo=i+1, hi=num.length-1, sum=target-num[j] -num[i];
while (lo<hi) {
if (num[lo] +num[hi] ==sum) {
res.add(Arrays.asList(num[j], num[i], num[lo], num[hi]));
while (lo<hi&&num[lo] ==num[lo+1])
lo++;
while (lo<hi&&num[hi] ==num[hi-1])
hi--;
lo++;
hi--;
                        } elseif (num[lo] +num[hi] <sum)
lo++;
elsehi--;
                    }
                }
            }
    }
returnres;
}

时间复杂度:O(n³)。

空间复杂度:O(N),最坏情况,即 N 是指 n 个元素的排列组合个数,即 N=C^4_nN=Cn4,用来保存结果。

完全是按照 3Sum 的思路写的,比较好理解。


相关文章
|
7月前
leetcode-472. 连接词
leetcode-472. 连接词
51 0
|
7月前
LeetCode
LeetCode
42 0
|
7月前
leetcode-827:最大人工岛
leetcode-827:最大人工岛
64 0
|
7月前
leetcode-475:供暖器
leetcode-475:供暖器
50 0
|
7月前
|
Java
leetcode-474:一和零
leetcode-474:一和零
42 0
|
7月前
|
消息中间件 Kubernetes NoSQL
LeetCode 1359、1360
LeetCode 1359、1360
|
存储
leetcode:53.最大字序和
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
53 0
leetcode 827 最大人工岛
leetcode 827 最大人工岛
61 0
leetcode 827 最大人工岛
|
Python
LeetCode 1904. 你完成的完整对局数
一款新的在线电子游戏在近期发布,在该电子游戏中,以 刻钟 为周期规划若干时长为 15 分钟 的游戏对局。这意味着,在 HH:00、HH:15、HH:30 和 HH:45 ,将会开始一个新的对局,其中 HH 用一个从 00 到 23 的整数表示。游戏中使用 24 小时制的时钟 ,所以一天中最早的时间是 00:00 ,最晚的时间是 23:59 。
106 0