leetcode刷題筆記 陣列7

2021-10-23 04:24:46 字數 1703 閱讀 8267

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

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

class

solution

:def

removeduplicates

(self, nums: list[

int])-

>

int:

n =len(nums)

i =0for j in

range

(n):

if nums[i]

!=nums[j]

: i+=

1 nums[i]

=nums[j]

nums[:]

=nums[

0:i+

1]

實現獲取下乙個排列的函式,演算法需要將給定數字序列重新排列成字典序中下乙個更大的排列。

如果不存在下乙個更大的排列,則將數字重新排列成最小的排列(即公升序排列)。

必須原地修改,只允許使用額外常數空間。

1,2,3 → 1,3,2

3,2,1 → 1,2,3

1,1,5 → 1,5,1

字典序如下: [1] 

設p是1~n的乙個全排列:p=p1p2......pn=p1p2......pj-1pjpj+1......pk-1pkpk+1......pn

1)從排列的右端開始,找出第乙個比右邊數字小的數字的序號j(j從左端開始計算),即 j=max(右邊的數從右至左是遞增的,因此k是所有大於pj的數字中序號最大者)

3)對換pj,pk

4)再將pj+1......pk-1pkpk+1......pn倒轉得到排列p'=p1p2.....pj-1pjpn.....pk+1pkpk-1.....pj+1,這就是排列p的下乙個排列。

有了這個性質,這道題便迎刃而解:

class

solution

:def

nextpermutation

(self, nums: list[

int])-

>

none

:"""

do not return anything, modify nums in-place instead.

"""n =

len(nums)

for i in

range

(n-1,0

,-1)

:if nums[i-1]

: nums[i:]=

sorted

(nums[i:])

for j in

range

(i,n)

:if nums[j]

>nums[i-1]

: nums[j]

,nums[i-1]

=nums[i-1]

,nums[j]

break

return

nums.sort(

)

此外,這道題還讓我學到了sorted這個函式用於替代sort方法。

leetcode刷題筆記 陣列2

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。這道題主體思想是雜湊對映。python的字典就使用了hash的思想。直接貼 class solution def majorityelement s...

leetcode刷題筆記 陣列3

給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。這裡的解答用到了投機取巧的一種方法,使用set函式 class solution def containsduplicate self,nums list int...

C 刷題筆記 陣列

在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。利用該二維陣列的性質 所以,對於左下角的值 m,它是該行最小的數,又是該列最大的數。可以從這裡開始比較,按行按...