算法題打卡力扣第169題:多數元素(easy)

文章目錄

    • 題目描述
    • 解法一:暴力解
    • 解法二 排序法
    • 解法三:Boyer-Moore 投票算法 (最優解)

題目描述

在這里插入圖片描述

解法一:暴力解

定義一個數組C用于存放nums數組中每個數出現的次數,然后再遍歷C,判斷C【i】是否大于? n/2 ?,如果是,則返回該元素(計數排序)
代碼實現:

class Solution {
public:int majorityElement(vector<int>& nums) {int n = nums.size();//需要使用哈希表unordered_map<int,int> counts;for(int i=0;i<n;i++){counts[nums[i]]++;}//遍歷哈希表for(auto const&pair:counts){if(pair.second>n/2){return pair.first;}}return -1;}
};

執行結果:
在這里插入圖片描述

復雜度分析:
時間 O(n)
空間 O(n)

解法二 排序法

先排序nums,如果存在一個數出現的次數超過了數組長度的一半,那么將數組排序后,這個數必然會出現在數組中間的位置。
代碼實現

class Solution {
public:int majorityElement(vector<int>& nums) {int n = nums.size();sort(nums.begin(),nums.end());return nums[n/2];}
};

執行結果
在這里插入圖片描述

復雜度分析
時間:排序的時間復雜度為O(nlogn)
空間:O(1)

解法三:Boyer-Moore 投票算法 (最優解)

思路: 這是一個非常巧妙的算法。可以想象成不同陣營的人進行“消耗戰”。

  1. 我們維護一個 candidate (候選人) 和一個 count (計數器)。
  2. 遍歷數組,如果 count 為 0,就將當前元素設為 candidate。
  3. 如果當前元素和 candidate 相同,count 加 1。
  4. 如果當前元素和 candidate 不同,count 減 1 (相當于一組“同歸于盡”)。
  5. 由于眾數的數量超過了其他所有數字數量的總和,它最后一定會留下來成為 candidate。

實現代碼

class Solution {
public:int majorityElement(vector<int>& nums) {int n = nums.size();int candidate=0,count=0;for(int i=0;i<n;i++){if(count==0){candidate=nums[i];}if(candidate==nums[i]){count++;}else{count--;}}return candidate;}
};

執行結果
在這里插入圖片描述

復雜度分析
時間O(n)
空間O(1)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/94898.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/94898.shtml
英文地址,請注明出處:http://en.pswp.cn/web/94898.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

A6.0:PCB的設計流程

第一步&#xff1a;導入網表第二步&#xff1a;結構導入和板框定義1.導入結構文件:加載DXF格式的機械結構圖(含板框、定位孔、限高區)&#xff0c;確保元件布局符合物理約束。2.固定器件預放置:將接插件、按鍵、散熱器等結構敏感元件鎖定到指定位置&#xff0c;避免后期調整沖突…

深度學習在金融訂單簿分析與短期市場預測中的應用

金融訂單簿記錄了市場上買賣雙方的委托訂單信息&#xff0c;包括價格、數量、訂單類型等關鍵要素。其數據具有以下特點&#xff1a; 高頻性&#xff1a;訂單在極短時間內不斷產生與變化&#xff0c;數據更新速度極快&#xff0c;每秒可能產生大量新訂單。序列性&#xff1a;訂單…

C++基礎算法——貪心算法

思想&#xff1a;總是做出在當前看來是最好的選擇 例題一、排隊打水問題 n個人&#xff0c;r個水龍頭&#xff0c;花費時間最少的安排&#xff1f;&#xff08;包含等待時間&#xff09; #include<iostream> #include <bits/stdc.h> using namespace std; int ma…

事務和鎖(進階)

事務和鎖&#xff08;進階&#xff09;一.回顧事務1.什么是事務2 為什么要使用事務3 怎么使用事務二.InnoDB和ACID模型三. 如何實現原子性四.如何實現持久性五.隔離性實現原理1.事務的隔離性2.事務的隔離級別3.鎖1&#xff09;鎖信息2&#xff09; 共享鎖和獨占鎖-Shared and E…

【Mentor Xpedition】預習一下

這個軟件不同于一般的PCB設計軟件&#xff0c;采用獨特的中心庫形式&#xff0c;相比cadence的SCH和PCB更緊湊&#xff0c;或者說本就是一家人&#xff0c;不像orcad和allegro強行捆在一起。 基本symbol給原理用&#xff0c;cell給PCB用。

通過代碼認識 CNN:用 PyTorch 實現卷積神經網絡識別手寫數字

目錄 一、從代碼看 CNN 的核心組件 二、準備工作&#xff1a;庫導入與數據加載 三、核心&#xff1a;用代碼實現 CNN 并理解各層作用 1.網絡層結構 2.重點理解&#xff1a;卷積層參數與輸出尺寸計算 四、訓練 CNN 五、結果分析 卷積神經網絡&#xff08;CNN&#xff09;…

基于SpringBoot和Thymeleaf開發的英語學習網站

角色&#xff1a; 管理員、用戶 技術&#xff1a; SpringBoot、Thymeleaf、MySQL、MyBatis、jQuery、Bootstrap 核心功能&#xff1a; 這是一個基于SpringBoot的英語學習平臺&#xff0c;旨在為用戶提供英語學習資料&#xff08;如書籍、聽力、單詞&#xff09;的管理和學習功能…

把 AI 塞進「智能跳繩」——基于 MEMS 傳感器的零樣本卡路里估算器

標簽&#xff1a;MEMS、卡路里估算、零樣本、智能跳繩、TinyML、RISC-V、低功耗、邊緣 AI ---- 1. 背景&#xff1a;為什么跳繩要「算卡路里」&#xff1f; 全球 1.5 億人把跳繩當日常運動&#xff0c;卻苦于&#xff1a; ? 機械計數器誤差大&#xff1b; ? 手機 App 需聯網…

礦用隨鉆測量現場應用中,最新的MEMS陀螺定向短節的優勢是什么?

在當代礦業開發向深部復雜地層進軍的過程中&#xff0c;隨鉆測量技術是控制鉆井定向打孔質量和提升長距離鉆探中靶精度的核心手段&#xff0c;煤礦井下定向鉆孔、瓦斯抽放孔、探放水孔等關鍵工程面臨著一系列特殊挑戰&#xff1a;強磁干擾、劇烈振動、空間受限等惡劣條件。最新…

Spring Boot 使用 RestTemplate 調用 HTTPS 接口時報錯:PKIX path building failed 解決方案

在使用 Spring Boot RestTemplate 調用 HTTPS 接口時&#xff0c;很多同學會遇到類似下面的報錯&#xff1a;javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certif…

【C語言入門級教學】sizeof和strlen的對?

1.sizeof和strlen的對? 1.1 sizeof sizeof 計算變量所占內存空間??的&#xff0c;單位是字節&#xff0c;如果操作數是類型的話&#xff0c;計算的是使?類型創建的變量所占內存空間的??。 sizeof 只關注占?內存空間的??&#xff0c;不在乎內存中存放什么數據。 ?如&a…

線程安全及死鎖問題

系列文章目錄 初步了解多線程-CSDN博客 目錄 系列文章目錄 前言 一、線程安全 1. 線程安全問題 2. 問題原因分析 3. 問題解決辦法 4. synchronized 的優勢 1. 自動解鎖 2. 是可重入鎖 二、死鎖 1. 一個線程一把鎖 2. 兩個線程兩把鎖 3. N 個線程 M 把鎖 4. 死鎖…

2025年8月無人駕駛技術現有技術報告

第1章 引言 無人駕駛技術作為21世紀交通運輸領域最具革命性的技術創新之一&#xff0c;正在深刻地改變著人類的出行方式和生活模式。進入2025年&#xff0c;隨著人工智能、5G通信、高精度傳感器等關鍵技術的快速發展與成熟&#xff0c;無人駕駛技術已從實驗室的概念驗證階段逐…

CETOL 6σ 助力康美醫療(CONMED Corporation)顯著提升一次性穿刺器產品合格率

概述 康美醫療 (CONMED Corporation)將 Sigmetrix 的 CETOL 6σ 公差分析軟件應用于一次性穿刺器的結構優化。該裝置是微創外科技術的一次早期突破。在設計階段&#xff0c;團隊發現“測量臨界間隙”存在尺寸偏差、超出預期范圍&#xff0c;可能在手術中造成患者皮膚損傷&…

LaunchScreen是啥?AppDelegate是啥?SceneDelegate是啥?ContentView又是啥?Main.storyboard是啥?

雖然我很想挑戰一下swiftui,但是精力真的是有限&#xff0c;把精力分散開不是一個很好的選擇&#xff0c;so swiftui淺嘗則止了&#xff0c;目前的精力在html上面。 AppDelegate todo SceneDelegate todo ContentView 最明顯的就是這個&#xff0c;當編輯的時候&#xff0c;頁面…

垃圾回收機制(GC)

目錄 垃圾回收機制 引用計數法 可達性分析算法 垃圾回收算法 標記清除算法 復制算法 標記壓縮算法 JVM中一次完整的GC&#xff08;分代收集算法&#xff09; 在新生代中 在老年代中 空間分配擔保原則 對象從新生代進入老年代的幾種情況? Young GC 和 Full GC 垃…

DNS域名系統

DNS域名系統一、什么是DNS?二、DNS的域名層級1. 根域2. 頂級域3. 二級域4. 三級域&#xff08;子域&#xff09;5. 主機名三、DNS服務器的分類四、DNS的解析過程五、DNS的記錄類型六、FQDN&#xff08;完全限定域名&#xff09;一、什么是DNS? DNS&#xff08;Domain Name S…

虛擬內存和虛擬頁面

虛擬內存虛擬內存是現代操作系統提供的一種內存管理機制&#xff0c;它允許程序訪問比實際物理內存更大的地址空間。虛擬內存通過將程序的地址空間劃分為多個固定大小的塊&#xff08;稱為頁面&#xff09;&#xff0c;并將這些頁面映射到物理內存或磁盤上的頁面文件中&#xf…

【2025年電賽E題】基于k230的矩形框識別鎖定1

文章目錄 概要 整體架構流程 技術名詞解釋 技術細節 1. 多閾值適配與目標識別邏輯 2. 動態ROI與狀態管理機制 3. 數據平滑與偏差計算 4. 硬件適配與UART通信 小結 靜態矩形框識別 動態矩形框追蹤 概要 本文分析的代碼是基于立創廬山派K230CanMV開發板的目標追蹤系統實現,主要…

c語言中的數組可以用int a[3]來創建。寫一次int就可以了,而java中要聲明兩次int類型像這樣:int[] arr = new int[3];

C 語言數組只需寫一次int&#xff0c;而 Java 需兩次int相關聲明&#xff0c;核心原因是兩種語言的數組本質定義、類型系統設計和內存管理邏輯完全不同&#xff0c;具體可拆解為兩點核心差異&#xff1a;一、C 語言&#xff1a;數組是 “內存塊的類型綁定”&#xff0c;一次聲明…