1、給定乙個陣列 nums,編寫乙個函式將所有 0 移動到陣列的末尾,同時保持非零元素的相對順序。
def
movezeroes
(self, nums: list[
int])-
>
none
:"""
do not return anything, modify nums in-place instead.
"""#j表示下乙個非0元素的位置
j =0 l =
len(nums)
for i in
range
(l):
#遇到0就跳過繼續遍歷,找到非0就讓這個值放到j位置,並把j更新,遍歷完整個陣列即可
if nums[i]!=0
: nums[j]
,nums[i]
= nums[i]
,nums[j]
j+=1
時間複雜度:o(n),一般情況下這種需要遍歷的操作,最好要求能達到o(n),可以考慮結合hash來進行操作。
2、給定乙個陣列 nums 和乙個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o1 額外空間的條件下完成。
元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。
思路:
還是要遍歷陣列,考慮當陣列中這個值不等於val,就代表新陣列中要有它,所以用乙個j游標存放不等於val的位置,然後遍歷陣列即可
def
removeelement
(self, nums: list[
int]
, val:
int)
->
int:
size =
len(nums)
j =0#統計不等於val的個數和下標
for i in
range
(size)
:#如果不等於val就放在j上,把j後移
if nums[i]
!= val:
nums[j]
=nums[i]
j +=
1return j
3、給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 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。
你不需要考慮陣列中超出新長度後面的元素。
這道題類似第二題:
def
removeduplicates
(self, nums: list[
int])-
>
int:
size =
len(nums)
if size ==0:
return
0#j從1開始,對應位置儲存不重複數字的值
j =1for i in
range
(size)
:#越過0
if i ==0:
continue
#由於是排序陣列,所以當出現不相等時,就把放在j的位置,並且更新j
if nums[i]
!= nums[i-1]
: nums[j]
=nums[i]
j +=
1return j
4、給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素最多出現兩次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o(1) 額外空間的條件下完成。
基本思路給在了注釋裡,這裡只要想清楚一些細節的地方就可以了
def
removeduplicates
(self, nums: list[
int])-
>
int:
size =
len(nums)
if size ==0:
return
0 j =
0#記錄新陣列的長度
curret_num = nums[0]
#記錄當前的數字
count =
0#記錄當前數字出現的次數
for i in
range
(size)
:if i ==0:
count =
1 j =
1continue
if nums[i]
!= nums[i-1]
:#找到不相等的情況需要更新當前數字資訊
curret_num = nums[i]
nums[j]
= nums[i]
j +=
1 count =
1continue
if nums[i]
== curret_num and count <2:
#等於當前數字情況下,計數必須小於2,否則繼續向後
count +=
1 nums[j]
= nums[i]
#需要更新第j個位置的值
j +=
1return j
還有一種更精簡的解法:
def
removeduplicates
(self, nums)
:"""
:type nums: list[int]
:rtype: int
"""l =
len(nums)
if l <=2:
return l
counter =
2for i in
range(2
, l)
:if nums[i]
!= nums[counter -2]
: nums[counter]
= nums[i]
counter +=
1return counter
總之:在陣列中,遍歷一遍就解決了問題,可以使得複雜度降低很多。
願每乙個程式設計師都能被溫柔相待
Leetcode刷題筆記(C ) 陣列
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。最高位數字存放在陣列的首位,陣列中每個元素只儲存單個數字。你可以假設除了整數 0 之外,這個整數不會以零開頭。示例 1 輸入 1,2,3 輸出 1,2,4 解釋 輸入陣列表示數字 123。示例 2 輸入 4,3,2,1 輸出 4,3,...
Lettcode刷題筆記 四 陣列
以後打算刷題按照同樣的型別來。941.有效的山脈陣列 我的解法 class solution 找到最大值以及它的座標 for int i 1 i arr.length i 判斷左側 for int i 1 i maxindex i 考慮兩種特殊情況 if maxindex arr.length 1 ...
leetcode 刷題筆記(簡單題)陣列篇
初始化陣列 int a int b new int arrays.tostring b 輸出陣列 int c new int 3 指定陣列長度 新建 arraylist 物件 arraylistarr new arraylist arr.add 1 新增元素 o 1 arr.add 3,99 向下標...