leetcode第21题

简介: 总递归看起来,两个字,优雅!但是关于递归的时间复杂度,空间复杂度的求法,先留个坑吧。

image.png

合并两个有序链表。

解法一 迭代

遍历两个链表。

publicListNodemergeTwoLists(ListNodel1, ListNodel2) {
ListNodeh=newListNode(0);
ListNodeans=h;
while (l1!=null&&l2!=null) {
if (l1.val<l2.val) {
h.next=l1;
h=h.next;
l1=l1.next;
        } else {
h.next=l2;
h=h.next;
l2=l2.next;
        }
    }
if(l1==null){
h.next=l2;
    }
if(l2==null){
h.next=l1;
    } 
returnans.next;
}

时间复杂度:O(m + n)。

空间复杂度:O(1)。

解法二 递归

参考这里

ListNodemergeTwoLists(ListNodel1, ListNodel2) {
if(l1==null) returnl2;
if(l2==null) returnl1;
if(l1.val<l2.val) {
l1.next=mergeTwoLists(l1.next, l2);
returnl1;
    } else {
l2.next=mergeTwoLists(l2.next, l1);
returnl2;
    }
}

时间复杂度:

空间复杂度:

递归看起来,两个字,优雅!但是关于递归的时间复杂度,空间复杂度的求法,先留个坑吧。



相关文章
|
8月前
leetcode-1447:最简分数
leetcode-1447:最简分数
50 0
|
8月前
leetcode-475:供暖器
leetcode-475:供暖器
53 0
|
8月前
|
消息中间件 Kubernetes NoSQL
LeetCode 3、28、1351
LeetCode 3、28、1351
leetcode 827 最大人工岛
leetcode 827 最大人工岛
65 0
leetcode 827 最大人工岛
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
115 0
leetcode第39题
对回溯法又有了更深的了解,一般的架构就是一个大的 for 循环,然后先 add,接着利用递归进行向前遍历,然后再 remove ,继续循环。而解法二的动态规划就是一定要找到递进的规则,开始的时候就想偏了,导致迟迟想不出来。
100 0
leetcode第39题
|
算法
leetcode第34题
第二种思路,参考这里。 我们开始更新 start 的时候,是 mid + 1,如果剩两个元素,例如 2 4,target = 6 的话,此时 mid = 0,start = mid + 1 = 1,我们返回 start + 1 = 2。如果 mid 是右端点,那么 mid = 1,start = mid + 1 = 2,这样就可以直接返回 start 了,不需要在返回的时候加 1 了。
113 0
leetcode第34题
|
机器学习/深度学习
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; }
104 0
leetcode第50题
leetcode第51题
较经典的回溯问题了,我们需要做的就是先在第一行放一个皇后,然后进入回溯,放下一行皇后的位置,一直走下去,如果已经放的皇后的数目等于 n 了,就加到最后的结果中。然后再回到上一行,变化皇后的位置,然后去找其他的解。 期间如果遇到当前行所有的位置都不能放皇后了,就再回到上一行,然后变化皇后的位置。再返回到下一行。 说起来可能还费力些,直接看代码吧。
leetcode第51题