[TS LeetCode] 169. Majority Element .Boyer-Moore 摩爾投票演算法

更新 發佈閱讀 3 分鐘

題目摘要

給定一個長度為n的整數陣列nums,請找出其中的「主要元素」。

主要元素指的是在陣列中出現次數超過⌊n / 2⌋的元素,我們可以假設主要元素一定存在於這個陣列中。

題目知識點

  1. 主要元素:指的是在陣列中出現次數超過一半以上的元素。
  2. 摩爾投票算法:一種有效的解決主要元素問題的方法,能夠在O(n)時間內找到主要元素。

先備知識

  1. 了解陣列(Array)的基本概念和操作。
  2. 熟悉JavaScript/TypeScript中的迴圈和條件判斷。
  3. 理解如何使用變數來追蹤元素出現次數。

Boyer–Moore majority vote algorithm 多數投票演算法

是一種用於找出具有多數元素的算法,它在陣列中的應用情境以及使用限制如下

使用情境

  1. 主要元素檢測: 多數投票演算法主要用於找出陣列中出現次數超過一半的主要元素。這在選舉或投票系統中非常有用,用於確定最多選票的候選人。
  2. 數據流中的眾數:當你需要在數據流中即時找到最多出現的元素,摩爾投票算法可以動態處理數據並找出眾數。

使用限制

  1. 主要元素必須存在:摩爾投票演算法假設主要元素一定存在於陣列中。如果主要元素可能不存在,則需要額外的檢查。
  2. 不適用於多元素問題:這個算法僅適用於找出單一主要元素,當有多個主要元素時,它無法處理。
  3. 具體數量未知:這個算法不適用於在事先不知道主要元素應該出現多少次的情況。它僅告訴你主要元素是否存在並找到它。

應用情境

在網頁頁面開發中,這種主要元素的問題常常應用在以下情境:

  • 用戶投票:當需要確定在一次投票中哪個選項獲得了多數選票,可以使用主要元素算法。
  • 購物網站庫存:在網上購物平台上,需要找到最暢銷的產品,以便進一步推廣,這可以使用主要元素概念。
  • 活動參與者:在線上活動報名中,需要確定參與者中是否有某個主要參與者,以作出相關安排。

結論

這道題目中使用了摩爾投票算法,該算法可以高效地找出主要元素。這對於處理大型數據集中的主要元素問題非常有用,並且可以在O(n)時間內解決。摩爾投票算法的關鍵是使用兩個變數來追蹤候選元素和其出現次數,通過適當的條件判斷和更新,最終找到主要元素。這個方法在多個應用情境中都能派上用場,特別是當我們需要找到一組數據中的主要趨勢或最多的元素時。

解答:

Time Complexity : O(n)

n是陣列nums的長度

Space Complexity:O(1)

空間複雜度是指在執行程式期間所需的額外記憶體空間。這段程式碼中只使用了兩個變數,即"majority"和"count",它們的空間消耗是固定的,與輸入陣列的大小無關。因此,空間複雜度是O(1),稱為常數空間複雜度。

function majorityElement(nums: number[]): number {
    let majority: number = nums[0];
    let count: number = 0;

    for (let i = 0; i < nums.length; i++) {
        if (count === 0) {
            majority = nums[i];
        }

        majority === nums[i] ? count++ : count--
    }

    return majority;
};


相關連結




留言
avatar-img
毛怪的沙龍
3會員
8內容數
"TypeScript LeetCode" 以 TypeScript 為工具,深入解析 LeetCode 上的算法和資料結構問題,提供清晰解釋和程式碼示範,幫助您精進 TypeScript 技能,解決挑戰性問題,無論您的程式開發水平如何。讓我們一同鑽研、提升,迎接算法挑戰,成長技術專長!,快速提高您的技能水平
毛怪的沙龍的其他內容
2023/10/19
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
2023/10/19
題目摘要 給定一個整數陣列 `prices`,其中 `prices[i]` 代表第 `i` 天的股票價格。在每一天,你可以決定買入和/或賣出股票。然而,你同一時間只能擁有至多一股股票。你可以在同一天內買入然後立刻賣出股票。找出並返回你可以實現的最大利潤。
Thumbnail
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/19
題目摘要 給定一個陣列 prices,其中 prices[i] 代表第 i 天的股票價格。你希望透過在某一天購買一股股票,並在未來的某一天賣出它,以最大化你的利潤。如果無法獲得任何利潤,則返回 0。
Thumbnail
2023/10/12
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
Thumbnail
2023/10/12
重要知識點: 1. TypeScript 全局擴展,使所有陣列都能使用 groupBy 方法。 2. 利用泛型創建彈性函數,提高代碼可重用性。 3. 迭代陣列中的元素,實現遍歷和處理功能。 4. 物件的鍵值對操作,用於建立以函數輸出為鍵的物件。
Thumbnail
看更多
你可能也想看
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
vocus 慶祝推出 App,舉辦 2026 全站慶。推出精選內容與數位商品折扣,訂單免費與紅包抽獎、新註冊會員專屬活動、Boba Boost 贊助抽紅包,以及全站徵文,並邀請你一起來回顧過去的一年, vocus 與創作者共同留下了哪些精彩創作。
Thumbnail
這題是面試中常見的經典題目,要求從一個陣列裡找出出現次數超過一半的元素,也就是所謂的「眾數」。為了更好理解,會先用一個直觀、易懂的方式來解釋問題,透過哈希表的方法來找出答案。接著,我會介紹一個更快、更有效率的解法,也就是 Boyer-Moore 多數投票算法。
Thumbnail
這題是面試中常見的經典題目,要求從一個陣列裡找出出現次數超過一半的元素,也就是所謂的「眾數」。為了更好理解,會先用一個直觀、易懂的方式來解釋問題,透過哈希表的方法來找出答案。接著,我會介紹一個更快、更有效率的解法,也就是 Boyer-Moore 多數投票算法。
Thumbnail
三種做法所花的時間都不同,請試著一步步優化,在只跑一次迴圈下完成吧!
Thumbnail
三種做法所花的時間都不同,請試著一步步優化,在只跑一次迴圈下完成吧!
Thumbnail
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
題目摘要: 在這篇文章中,我們將討論如何使用摩爾投票算法找出一個陣列中的「主要元素」。主要元素指的是在陣列中出現次數超過一半的元素,並且我們可以確定它一定存在於陣列中。這個算法的核心思想和應用將在本文中被詳細介紹。 題目知識點: 主要元素的定義和重要性。 摩爾投票算法的工作原理和優點。 先備知識
Thumbnail
題目會給定我們一個陣列,要求我們找出裡面統計最多出現次數的偶數 。 假如有兩個偶數出現的次數一樣多,取最數字比較小的那個最為答案。
Thumbnail
題目會給定我們一個陣列,要求我們找出裡面統計最多出現次數的偶數 。 假如有兩個偶數出現的次數一樣多,取最數字比較小的那個最為答案。
Thumbnail
題目會給定我們一個陣列,陣列長度為n。 要求我們找出裡面出現次數超過 n / 3次的數字。
Thumbnail
題目會給定我們一個陣列,陣列長度為n。 要求我們找出裡面出現次數超過 n / 3次的數字。
Thumbnail
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
Thumbnail
題目會給定我們一個陣列,要求我們找出裡面出現次數最多的數字。 出現次數最多的數字也就是我們在統計上所謂的 眾數 mode
Thumbnail
題目會給定一個陣列,要求我們把裡面的數字依照奇偶數去排序, 偶數的排在前面,奇數的排在後面。
Thumbnail
題目會給定一個陣列,要求我們把裡面的數字依照奇偶數去排序, 偶數的排在前面,奇數的排在後面。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News