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;
    }
}

时间复杂度:

空间复杂度:

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



相关文章
|
19天前
LeetCode
LeetCode
22 0
|
19天前
leetcode-475:供暖器
leetcode-475:供暖器
22 0
leetcode 283 移动零
leetcode 283 移动零
38 0
|
C++ Python
LeetCode 771. Jewels and Stones
LeetCode 771. Jewels and Stones
62 0
|
存储 算法 索引
LeetCode 27+LeetCode 35 讲解(姊妹篇)
LeetCode 27+LeetCode 35 讲解(姊妹篇)
70 0
|
算法
【LeetCode】这么简单的题,豆编又不会!
【LeetCode】这么简单的题,豆编又不会!
110 0
|
算法
leetcode第45题
时间复杂度:O(n)。 空间复杂度:O(1)。 这里要注意一个细节,就是 for 循环中,i < nums.length - 1,少了末尾。因为开始的时候边界是第 0 个位置,steps 已经加 1 了。如下图,如果最后一步刚好跳到了末尾,此时 steps 其实不用加 1 了。如果是 i < nums.length,i 遍历到最后的时候,会进入 if 语句中,steps 会多加 1 。
leetcode第45题
|
算法
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 了。
leetcode第34题
leetcode第39题
对回溯法又有了更深的了解,一般的架构就是一个大的 for 循环,然后先 add,接着利用递归进行向前遍历,然后再 remove ,继续循环。而解法二的动态规划就是一定要找到递进的规则,开始的时候就想偏了,导致迟迟想不出来。
leetcode第39题
|
算法
leetcode第32题
这几种算法,暴力破解和动态规划我觉得想的话,还是能分析出来的话,最后两种算法感觉是去挖掘题的本质得到的算法,普适性不是很强。但最后一种算法,从左到右,从右到左,是真的强。
leetcode第32题