LeetCode169求眾數 分治

2021-08-16 02:16:06 字數 888 閱讀 9657

給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於⌊ n/2 ⌋的元素。

你可以假設陣列是非空的,並且陣列中的眾數永遠存在。

將每個數字彷彿雜湊表中,記數,直到某個數的count>n/2。時間複雜度為o(n)。

因為眾數是出現次數大於n/2的數字,所以排序之後中間的那個數字一定是眾數。即nums[n/2]為眾數。時間複雜度即排序的時間複雜度。

分治法是將整個問題化簡為乙個乙個的小問題去解,將陣列分成簡單的幾部分,比如講一組數分為兩部分,第一部分的眾數如果等於第二部分的眾數,則這個數就是上一層那一組的眾數,如果第一部分不等於第二部分,則遍歷這一組數,記錄這兩個數的出現頻率,返回為頻率最大的,如果頻率相同,返回誰都無所謂,因為在這裡眾數x肯定存在的,那麼肯定會有至少兩個x相連,如果不相連的話,那最後乙個數字肯定是眾數x。(例如:1 2 1 2 1 2 1,12112)。時間複雜度為o(n)。

我用了分治法解決的,下面是測試**:

public class lc169 ;

public static void main(string args)

public static int find(int nums, int begin, int end)}}

}

下面是提交**

class solution 

public static int find(int nums, int begin, int end)}}

}

每次從陣列中找出一對不同的元素,將它們從陣列中刪除,直到遍歷完整個陣列。由於這道題已經說明一定存在乙個出現次數超過一半的元素,所以遍歷完陣列後陣列中一定會存在至少乙個元素。

leetcode169求眾數python實現

169求眾數 簡單 分治演算法 給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。1.方法一遍歷 首先想到的方法是將陣列的所有元素遍歷,計算每個元素出現的次數,最後返回出現次數最多的元素,即為眾數。class ...

求眾數leetcode 169 投票演算法

求眾數 解題思路 boyer moore kmp class solution count conditate nums i 1 1 return conditate 求眾數2 題目 給定乙個大小為 n 的陣列,找出其中所有出現超過 n 3 次的元素 解題思路 投票演算法 class solutio...

leetcode 演算法 求眾數 169

leetcode 傳送門 給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 本題是求陣列 現次數大於一半的元素。乙個基...