[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
留言分享你的想法!
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
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
大家好,我是一名眼科醫師,也是一位孩子的媽 身為眼科醫師的我,我知道視力發展對孩子來說有多關鍵。 每到開學季時,診間便充斥著許多憂心忡忡的家屬。近年來看診中,兒童提早近視、眼睛疲勞的案例明顯增加,除了3C使用過度,最常被忽略的,就是照明品質。 然而作為一位媽媽,孩子能在安全、舒適的環境
Thumbnail
我的「媽」呀! 母親節即將到來,vocus 邀請你寫下屬於你的「媽」故事——不管是紀錄爆笑的日常,或是一直想對她表達的感謝,又或者,是你這輩子最想聽她說出的一句話。 也歡迎你曬出合照,分享照片背後的點點滴滴 ♥️ 透過創作,將這份情感表達出來吧!🥹
Thumbnail
我的「媽」呀! 母親節即將到來,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
題目會給定一個陣列,要求我們把裡面的數字依照奇偶數去排序, 偶數的排在前面,奇數的排在後面。
Thumbnail
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
Thumbnail
題目會給我們一個排序好的陣列,還有一個目標值target 要求我們在陣列中尋找target所在的索引位置。 如果target 不存在,返回-1 題目要求必須在O( log n )對數時間內完成 。
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
這題就是經典的考排序驗算法, 不管在教科書、上機考、面試白板題都是一個很基本又滿熱門的題目。 題目會給定一個輸入陣列,要求我們實作一個排序演算法,把陣列元素從小到大排好。
Thumbnail
題目會給我們一個輸入陣列,長度為n+1。 陣列裡面會有n+1個數字,數字的範圍從1到n 裡面恰好有一個數字重複出現,要求我們找出那個重複的數字。 題目要求只能使用常數空間O(1),並且限制不能修改陣列內容。
Thumbnail
題目會給我們一個輸入陣列,長度為n+1。 陣列裡面會有n+1個數字,數字的範圍從1到n 裡面恰好有一個數字重複出現,要求我們找出那個重複的數字。 題目要求只能使用常數空間O(1),並且限制不能修改陣列內容。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News