当前位置: 首页 > news >正文

算法题打卡力扣第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.dtcms.com/a/356754.html

相关文章:

  • 【二叉树(DFS)- LeetCode】124. 二叉树中的最大路径和
  • 考民航安检员证需要具备哪些技能和知识?
  • 卷积神经网络为什么要填充(Padding)
  • Python爬虫实战:研究Pyplot模块,构建IMDb数据采集和分析系统
  • 【Tools】C#文件自动生成UML图
  • Vue3 全面介绍
  • ArcGIS Pro 地图打包与解包
  • STM32CubeMX + HAL 库:基于 I²C 通信的 AHT20 高精度温湿度测量实验
  • 佳易王钓场计时计费系统:全方位赋能钓场智能化管理,软件操作教程
  • Halcon那些事:如何使用差异模型create_variation_model检测印刷品缺陷
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(22):文法+单词第7回4 + 考え方1
  • Java全栈开发工程师面试实录:从基础到微服务的深度技术解析
  • LangChain如何使用通义千问的向量模型
  • 嵌入式学习日志————MPU6050简介
  • 2025年社交广告投放技术解析:应对CPM上涨的核心策略与实战方法
  • 元宇宙与娱乐产业:沉浸式体验与内容生态的重构
  • 前端工程化深度实践:从构建优化到CI/CD的完整解决方案
  • 基于无人机的风电叶片全自动智能巡检:高精度停角估计与细节优先曝光调控技术
  • 【Flask】测试平台开发,产品管理实现添加功能-第五篇
  • 【Flask】测试平台开发,集成禅道
  • 【Spring Cloud微服务】6.通信的利刃:深入浅出 Spring Cloud Feign 实战与原理
  • 前端-什么是Vue
  • 如何禁止网站内容被复制:技术、策略与深度思考
  • 【面试系列】谈谈你对数据库ACID的理解
  • 鸿蒙Next导航与路由指南:组件导航与页面路由的完美协作
  • Java中使用Spring Boot+Ollama实现本地AI的MCP接入
  • Dify平台:Agent开发初学者指南
  • Rust:所有权
  • Swift 解法详解:LeetCode 366《寻找二叉树的叶子节点》
  • SOME/IP-SD中”服务器服务组播端点”、“客户端服务组播端点”与“IPv4组播选项的区分