【演算法】求眾數-js解法
【題目描述】
給定一個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列中出現次數大於 ⌊ n/2 ⌋
的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在眾數。
示例 1:
輸入: [3,2,3] 輸出: 3
示例 2:
輸入: [2,2,1,1,1,2,2] 輸出: 2 【idea】仔細讀題目,從題意中可以知道的是,眾數(最多)只有一個,因為題最後面又說是非空的,所以只有一個眾數。所以我們可以這樣,遍歷整個陣列,讓每個元素和陣列裡面的所有元素(包括自己)依次進行比較。首先你就先設個參考的數值,比較的時候,二者相等你就可以在參考的數值上面加1個單位數值,不相等,那就減去一個單位數值。所以最後肯定是眾數的那個數值最大。以此為依據找眾數。 【具體做法】從第一個數開始count=1,遇到相同的就加1,遇到不同的就減1,減到0就重新換個數開始計數,總能找到最多的那個所謂的眾數。
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function(nums) {
let len = nums.length,
count = 1,
goal = nums[0];
for (i = 0; i < len; i++) {
if (nums[i] == goal) {
count ++;
} else {
count --;
}
if (count == 0) {
goal = nums[i];
count = 1;
}
}
return goal;
};
【延伸】其實這種解題方法有個名字叫“摩爾投票法”。什麼是“摩爾投票法”,詳情見:https://www.iteye.com/blog/mabusyao-2223195
相關文章
- 演算法題:求眾數演算法
- Leetcode 169:求眾數(最詳細的解法!!!)LeetCode
- 演算法:Majority Element(求眾數)演算法
- 優化的求眾數方法 - 摩爾投票演算法(演算法思想+求眾數的三種方法+摩爾投票演算法改進版求眾數 II)優化演算法
- 【演算法】已知必存在眾數,求該眾數 -- Boyer-Moore 投票演算法演算法
- 【演算法解題報告】求眾數演算法
- 演算法面試題彙總_2求眾數演算法面試題
- 求眾數、排序演算法、二分法排序演算法
- 【leetcode】求眾數LeetCode
- 找眾數演算法演算法
- c++實現求眾數及其重數C++
- Leetcode刷題——求眾數LeetCode
- 【LeetCode】求眾數(四種方法)LeetCode
- LeetCode簡單演算法題目-JS解法LeetCode演算法JS
- 求素數(質數)演算法演算法
- 【20190326】【每天一道演算法題】求眾數(分治演算法)演算法
- 分治演算法-眾數問題演算法
- 【演算法練習】(8)眾數演算法
- 演算法之絕對眾數演算法
- LeetCode169求眾數——分治LeetCode
- 抓住資料的小尾巴 – JS浮點數陷阱及解法JS
- 抓住資料的小尾巴 - JS浮點數陷阱及解法JS
- LeetCode每日一題:求眾數(No.169)LeetCode每日一題
- 分治法求眾數和重數(含檔案輸入輸出)
- 求取眾數及重數的演算法實現(Java)演算法Java
- java演算法 求最大公約數Java演算法
- 求自然數的組合數的回溯演算法演算法
- 演算法設計--眾數和重數問題(分治法)演算法
- 每日一道演算法題--leetcode 169--求眾數--python--兩種方法演算法LeetCodePython
- JavaScript 浮點數陷阱及解法JavaScript
- 求最大公公約數(最大公因數)—— 歐幾里得演算法演算法
- 二分查詢(JS解法)——高頻面試演算法題(百度真題)JS面試演算法
- 微分方程的數值解法 6
- [資料結構與演算法]15 兩行程式碼就可以搞定求眾數,但還有更巧的資料結構演算法行程
- (演算法)求1到1億間的質數或素數演算法
- LeetCode 之 JavaScript 解答第169題 —— 求眾數 I(Majority Element)LeetCodeJavaScript
- 38、外觀數列 | 演算法(leetode,附思維導圖 + 全部解法)300題演算法
- (七)一個尋找陣列中眾數的演算法陣列演算法