陣列中佔比超過一半的元素稱之為主要元素。給定乙個整數陣列,找到它的主要元素。若沒有,返回-1。
示例 1:
輸入:[1,2,5,9,5,9,5,5,5]
輸出:5
示例 2:
輸入:[3,2]
輸出:-1
示例 3:
輸入:[2,2,1,1,1,2,2]
輸出:2
說明:你有辦法在時間複雜度為 o(n),空間複雜度為 o(1) 內完成嗎?
思路:摩爾投票法+驗證
1、兩個數不同,同時消去,兩個數相同則保留,最後剩下的乙個或者多個值,便是眾數。但前提的一定存在眾數。
2、由於題目沒有給出一定存在眾數,例如1,2,3 進行一次摩爾投票消去剩下元素3 ,顯然是不對的。因此需要驗證得到的答案是否為眾數。
class
solution
else
if(nums[i]
!=n)
else
}//驗證n中存放的值是不是眾數
int count2 =0;
for(
int i : nums)
if(count2>nums.length/2)
else
}}
leetcode練習03 摩爾投票法
摩爾投票法適用於找出陣列中某個元素出現超過1 n n 1且n 0 次。借助leetcode的第169道題練習摩爾投票法 class solution int count 0 元素出現次數 int tempnum nums 0 當前元素 for int i 0 i nums.length i retu...
摩爾投票法 學習筆記
參考資料 絕對眾數 在序列出現次數 n 2 left lfloor dfrac n 2 right rfloor 2 n 的數。採用兩兩抵消的思想。因為其它所有數出現加起來都不如絕對眾數多,所以兩兩抵消後,只有最後剩下的可能是區間眾數。時間複雜度 o n o n o n 空間複雜度 o 1 o 1 ...
leetcode刷題,總結,記錄,備忘 117
leetcode117 follow up for problem populating next right pointers in each node what if the given tree could be any binary tree?would your previous solu...