LeetCode寒假刷題 Day05

2021-10-16 04:20:01 字數 2118 閱讀 3838

二、026 刪除排序陣列中的重複項

三、033 搜尋旋轉排序陣列

總結今天是寒假leetcode刷題打卡的第五天,加油加油!也希望我的博文能夠幫助到大家。

題號:23

難度:困難

023 合併k個公升序鍊錶

合併 k 個排序鍊錶,返回合併後的排序鍊錶。請分析和描述演算法的複雜度。

示例:

輸入: [ 1->4->5,

1->3->4,

2->6 ]

輸出: 1->1->2->3->4->4->5->6

採用兩兩合併的思想,用到了在昨天的 leetcode寒假刷題day04 中的021題——兩個有序鍊錶合併為乙個有序鍊錶,然後依次進行兩兩合併。

class

solution

return ans;

}public listnode mergetwolists

(listnode l1, listnode l2)

else

}while

(head2.next!=null)

l1=l1.next;

return l1;

}}

題號:26

難度:簡單

026 刪除排序陣列中的重複項

給定乙個 排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地修改輸入陣列 並在使用 o(1) 額外空間的條件下完成。

示例 1:

給定陣列 nums = [1,1,2],

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮陣列中超出新長度後面的元素。

說起這道題,其實不是第一次見了。我研究生同學前兩天面試位元組,然後就考了這道題。因此做的時候也比較有思路。

具體的思路就是雙指標(快慢指標),j慢i快,開始時j=0,i=1。當nums[j] == nums[i]時,for迴圈中的i++就可以跳過重複項,不相等時,讓nums[++j] = nums[i],然後讓i++,把值複製過來繼續執行到末尾即可,時間複雜度為 o(n)。

class

solution

else

}return nums.length-count;

}}

題號:33

難度:中等

033 搜尋旋轉排序陣列

假設按照公升序排序的陣列在預先未知的某個點上進行了旋轉。

( 例如,陣列 [0,1,2,4,5,6,7] 可能變為 [4,5,6,7,0,1,2] )。

搜尋乙個給定的目標值,如果陣列中存在這個目標值,則返回它的索引,否則返回 -1 。

你可以假設陣列中不存在重複的元素。

你的演算法時間複雜度必須是 o(log n) 級別。

示例 1:

輸入: nums = [4,5,6,7,0,1,2], target = 0

輸出: 4

示例 2:

輸入: nums = [4,5,6,7,0,1,2], target = 3

輸出: -1

示例 3:

輸入: nums = [5,1,3], target = 5

輸出: 0

示例 4:

輸入: nums = [4,5,6,7,8,1,2,3], target = 8

輸出: 0

示例 5:

輸入: nums = [3,1], target = 1

輸出: 1

看到這個時間複雜度,自然是想到用二分查詢。但是整個陣列不是全域性有序的,只是部分有序。這時,我們想到二分查詢時,兩邊必然至少有乙個部分有序,我們只需考慮無序和有序這兩種情況分別處理。

class

solution

else

}return-1

;}}

LeetCode刷題日記(Day16)

class solution class minstack void push int x void pop int top int getmin private stackdatastack stackminstack 分別求出heada和headb的長度len1和len2,以及len1和len2...

leetcode刷題之旅(day1)

給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...

Leetcode刷題之旅(Day2)

給出兩個 非空 的鍊錶用來表示兩個非負的整數。其中,它們各自的位數是按照 逆序 的方式儲存的,並且它們的每個節點只能儲存 一位 數字。如果,我們將這兩個數相加起來,則會返回乙個新的鍊錶來表示它們的和。您可以假設除了數字 0 之外,這兩個數都不會以 0 開頭。示例 輸入 2 4 3 5 6 4 輸出 ...