給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
這道題主體思想是雜湊對映。python的字典就使用了hash的思想。直接貼**。
class
solution
:def
majorityelement
(self, nums: list[
int])-
>
int:
n =len(nums)
over =
cnt =[0
for i in
range
(n)]
for i in
range
(len
(nums)):
if nums[i]
in over:
continue
else:)
for i in
range
(len
(nums)):
x =0 cnt[over.index(nums[i])]
=cnt[over.index(nums[i])]
+1x=cnt.index(
max(cnt)
)return
(over[x]
)
我這種寫法比較醜,貼乙個官方用c++實現的:
class
solution
}return majority;}}
;
給定乙個由整數組成的非空陣列所表示的非負整數,在該數的基礎上加一。
最高位數字存放在陣列的首位, 陣列中每個元素只儲存單個數字。
你可以假設除了整數 0 之外,這個整數不會以零開頭。
這道題需要注意的是,可能會出現[9,9,9]->[1,0,0,0]這樣的例子。
class
solution
:def
plusone
(self, digits: list[
int])-
> list[
int]
: n =
len(digits)
cnt =
0
ans =
for i in
range
(n):
cnt = cnt + digits[i]*10
**(n-i-1)
cnt = cnt+
1 c=
len(
str(cnt)
) tmp =[0
for i in
range
(c)]
for i in
range
(c):
tmp[i]
=int
(cnt/(10
**(c-i-1)
))cnt=cnt%(10
**(c-i-1)
)return tmp
還有一種巧妙的方法,利用python做出:
class
solution
:def
plusone
(self, digits: list[
int])-
> list[
int]
:##先變成乙個整的數字,然後做加法,然後轉換成str,再轉int加到新的list中
nums_str =
""for i in digits:
nums_str =nums_str+
str(i)
nums_int =
int(nums_str)+1
res =
for i in
str(nums_int)
:int
(i))
return res
本問題中學會了python的指數表示:
3**5表示3的5次冪,也就是3*3*3*3*3,等於243
3e5表示3乘以10的5次冪,也就是3*10*10*10*10*10,結果等於300000
學會了把float陣列轉化成int陣列的方式,即map方法:
list=[
1.3,
2.3,4,
5]#帶有float型的列表
int_list =
map(
int,
list
)#使用map轉換
print int_list [1
,2,4
,5]
leetcode刷題筆記 陣列3
給定乙個整數陣列,判斷是否存在重複元素。如果任何值在陣列 現至少兩次,函式返回 true。如果陣列中每個元素都不相同,則返回 false。這裡的解答用到了投機取巧的一種方法,使用set函式 class solution def containsduplicate self,nums list int...
leetcode刷題筆記 陣列7
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。class solution def removeduplicates self,nums list i...
C 刷題筆記 陣列
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。利用該二維陣列的性質 所以,對於左下角的值 m,它是該行最小的數,又是該列最大的數。可以從這裡開始比較,按行按...