給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列**現次數大於 ⌊ n/2 ⌋ 的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
示例 1:
輸入: [3,2,3]
輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2]
輸出: 2
解法一:暴力解法
其實也不算暴力解法,就是使用python自帶的sort函式先排序,因為多數元素超過n//2,所以第n//2必是多數元素。
解法二:摩爾投票法
摩爾投票法(boyer–moore majority vote algorithm),也被稱作「多數投票法」,演算法解決的問題是:如何在任意多的候選人中(選票無序),選出獲得票數最多的那個。
設定major、count兩個指標,major指向元素,count指向該元素出現的次數,遇到和major相同的元素,count+1;反之count-1.當count=0時,major變成下乙個元素。
注意:解法一當中包含了乙個sort函式,它本身就是乙個已經封裝好的排序函式,因此解法二使用指標的方式更加底層。
解法一:暴力解法
class
solution
:def
majorityelement
(self, nums: list[
int])-
>
int:
nums.sort(
)return nums[
len(nums)//2
]
解法二:
class
solution
(object):
defmajorityelement
(self, nums)
: count=
0 major=nums[0]
for i in nums:
if count==0:
major=i
if major==i:
count+=
1else
: count-=
1return major
Leetcode Array 27 移除元素
給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。不要使用額外的陣列空間,你必須僅使用 o 1 額外空間並 原地 修改輸入陣列。元素的順序可以改變。你不需要考慮陣列中超出新長度後面的元素。示例 1 給定 nums 3,2,2,3 va...
Leetcode Array 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
Leetcode Array 53 最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。解法一 dp 動...