【Leetcode】【169求眾數】【JavaScript】

来源:https://www.cnblogs.com/2463901520-sunda/archive/2019/03/07/10489540.html
-Advertisement-
Play Games

題目 169. 求眾數 給定一個大小為 n 的數組,找到其中的眾數。眾數是指在數組中出現次數大於 ⌊ n/2 ⌋ 的元素。 你可以假設數組是非空的,並且給定的數組總是存在眾數。 示例 1: 示例 2: 眾數(Mode)是統計學名詞,在統計分佈上具有明顯集中趨勢點的數值,代表數據的一般水平(眾數可以不 ...


 

題目

169. 求眾數

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

你可以假設數組是非空的,並且給定的數組總是存在眾數。

示例 1:

輸入: [3,2,3]
輸出: 3

示例 2:

輸入: [2,2,1,1,1,2,2]
輸出: 2

 

眾數(Mode)是統計學名詞,在統計分佈上具有明顯集中趨勢點的數值,代表數據的一般水平(眾數可以不存在或多於一個)。 修正定義:是一組數據中出現次數最多的數值,叫眾數,有時眾數在一組數中有好幾個。用 M 表示。 理性理解:簡單的說,就是一組數據中占比例最多的那個數。--《百度百科》

 

解答

解答一、對象中存儲所有元素及出現次數

拿到題目,我的第一想法就是for迴圈,

使用for迴圈遍歷元素並記下每個元素出現的次數,

存儲在一個對象中。

 

代碼如下:(leetcode已提交通過,執行用時:128ms)


/**
*未考慮nums數組元素個數為偶數的情況
*未考慮存在多個眾數的情況
*未考慮不存在眾數的情況
*未考慮數組中存在非數字的情況
*/

var majorityElement = function(nums) {
    var obj={};                         
    var halfNum=nums.length/2;
    var mode;
    if (nums.length===1) return nums[0];
    for (let i=0;i<nums.length;i++){    //拆解數組中元素,賦值為對象的key
       if(obj[nums[i]]){                //遍歷,若已有該key,
           obj[nums[i]]+=1;             //對應的value+1
           if(obj[nums[i]]>halfNum){    //若該key對應的value大於數組元素個數的半數
                mode=nums[i];
                return mode;            //返回該key值
           }
       }else{
           obj[nums[i]]=1;              //若沒有,加key,對應value賦值為1
       }
    }
};

 

解答二、假設法

for of 遍歷,假設第一個數為眾數,count計1,
其後的數字若相同則count 加1,否則count減1,
當count減為0時,假設此時新的num為眾數,繼續判斷,
眾數出現次數始終大於或等於所有元素個數的一半,
如果存在眾數,最終一定存在一個num,使得count大於0,
!!缺點:若不存在眾數,則會返回最後一個元素。

 

代碼如下:(leetcode已提交通過,執行用時:104ms)

let majorityElement = function(nums) {
    let count = 0;
    let mode = 0;
    for (let num of nums) {          
        if (count === 0) {            
            mode = num;               
        }                            
        count = mode === num ? count + 1 : count - 1;
    }                                 
    return mode;                     
};  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • HTML文本是由 HTML命令組成的描述性文本,HTML 命令可以說明文字、 圖形、動畫、聲音、表格、鏈接等。 ...
  • export 命令 1、概念 export用於定義要輸出的變數(let、var、const、function、class),定義的變數與值是動態綁定關係。 2、命令格式 1、 export 變數定義 2、 export { 變數名 [ as 另名} ,…} 3、 export default 匿名定 ...
  • 在用到 async 和await 做同步請求的時候 在調用 await 方法 的方法外面 必須加上 async 【就是說 有await 方法前面必須加 async 】 await 等待的方法 可以不是 async 的方法,但是返回的類型必須是 Promise 類型 並且將結果 放在 resolve ...
  • 題目 682. 棒球比賽 你現在是棒球比賽記錄員。給定一個字元串列表,每個字元串可以是以下四種類型之一:1.整數(一輪的得分):直接表示您在本輪中獲得的積分數。2. "+"(一輪的得分):表示本輪獲得的得分是前兩輪有效 回合得分的總和。3. "D"(一輪的得分):表示本輪獲得的得分是前一輪有效 回合 ...
  • Element組件網址: http://element-cn.eleme.io/#/zh-CN/component/message Layer組件網址: https://www.layui.com/doc/modules/upload.html 測試介面: 用Postman或者網址http://lo ...
  • (盜圖鎮樓) 多頁應用 每一次頁面跳轉的時候,後臺伺服器都會返回一個新的html文檔,這種類型的網站就是多頁網站,也叫多頁應用。{頁面跳轉——>返回html} 優點是:首屏時間快,seo效果好;缺點是:頁面切換慢; 為什麼多頁應用的首屏時間快? 首屏時間叫做頁面首個屏幕的內容展現時間,當我們訪問頁面 ...
  • "知乎原鏈" 本文為 "中文代碼示例之5分鐘入門TypeScript" 的 "CTS" 版本. CTS作者是@htwx(github). 它實現了關鍵詞和標準庫的所有命名漢化. 本文並未使用附帶的vscode相關插件(包括CTS語言插件和拼音輸入插件), 與原Typescript教程類似, 只用了命 ...
  • 前段時間做了微信自定義分享的功能,分享出的頁面存在邀請碼在ios手機上複製失敗的問題,然而在PC端和安卓機上是沒有問題的。百度了一下,基本給出的解決方案是:ios不單純支持on,為點擊的元素添加空點擊事件:onclick="",眾說芸芸,但是試了下沒一個有用! 如果你複製的文本內容來自是input的 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...