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 的思路写的,比较好理解。


相关文章
|
4月前
leetcode-1219:黄金矿工
leetcode-1219:黄金矿工
64 0
单链表反转 LeetCode 206
单链表反转 LeetCode 206
69 0
leetcode 827 最大人工岛
leetcode 827 最大人工岛
56 0
leetcode 827 最大人工岛
|
C++ Python
LeetCode 771. Jewels and Stones
LeetCode 771. Jewels and Stones
72 0
|
机器学习/深度学习
leetcode第50题
求幂次方,用最简单的想法,就是写一个 for 循环累乘。 至于求负幂次方,比如 2^{-10}2−10,可以先求出 2^{10}210,然后取倒数,1/2^{10}1/210 ,就可以了 double mul = 1; if (n > 0) { for (int i = 0; i < n; i++) { mul *= x; } } else { n = -n; for (int i = 0; i < n; i++) { mul *= x; } mul = 1 / mul; }
leetcode第50题
|
存储 算法
leetcode第43题
个位乘个位,得出一个数,然后个位乘十位,全部乘完以后,就再用十位乘以各个位。然后百位乘以各个位,最后将每次得出的数相加。十位的结果要补 1 个 0 ,百位的结果要补两个 0 。相加的话我们可以直接用之前的大数相加。直接看代码吧。
leetcode第43题
|
人工智能 算法
leetcode第41题
对于这种要求空间复杂度的,我们可以先考虑如果有一个等大的空间,我们可以怎么做。然后再考虑如果直接用原数组怎么做,主要是要保证数组的信息不要丢失。目前遇到的,主要有两种方法就是交换和取相反数。
leetcode第41题
leetcode第33题
问题出在,当数组剩偶数长度的时候,mid = (start + end)/ 2,mid 取的是左端点。上图的例子, mid > end, 更新 start = mid,start 位置并不会变化。那么下一次 mid 的值也不会变,就死循环了。所以,我们要更新 start = mid + 1。 综上,找最小值的下标的代码就出来了,同时,由于我们找的是位置 0 对应的下标,所以偏移就是最小值的下标.
leetcode第33题
leetcode第21题
总 递归看起来,两个字,优雅!但是关于递归的时间复杂度,空间复杂度的求法,先留个坑吧。
leetcode第21题