当前位置: 首页 > 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.xdnf.cn/news/1391671.html

相关文章:

  • 单点登录(SSO)前端(Vue2.X)改造
  • MYSQL-索引(上)
  • week5-[二维数组]对角线
  • 平安健康平安芯医AI解析:7×24小时问诊+95%诊断准确率,人文温度短板与医生效能提升引热议
  • DNS域名系统
  • Less嵌套写法
  • 无人机中的坐标系理解:机体坐标系,东北天(NED)坐标系,世界大地(WGS84)坐标系
  • 换公司如何快速切入软件项目工程
  • 在 Ubuntu 24.04 Linux 上安装 Basemark GPU Benchmark 的步骤
  • PCIe 6.0配置与地址空间架构:深入解析设备初始化的核心机制
  • 零知开源——基于STM32F407VET6和ADXL345三轴加速度计的精准运动姿态检测系统
  • Vibe Coding、AI IDE/插件
  • Vue3 + TS + MapboxGL.js 三维地图开发项目
  • 前端缓存问题详解
  • Prometheus+Grafana入门教程:从零搭建云原生服务器监控系统
  • 【论文阅读】SegCLIP:用于高分辨率遥感图像语义分割的多模态视觉语言和快速学习
  • 【完整源码+数据集+部署教程】控制台缺陷检测系统源码和数据集:改进yolo11-repvit
  • Vision Transformer模型解读
  • 性能测试-jmeter7-元件提取器
  • Free Subtitles-免费AI在线字幕生成工具,支持111种语言
  • selenium自动下载更新浏览器对应的webdriver
  • Spring AOP:JDK与CGLIB代理机制解析
  • 数据结构(C语言篇):(五)单链表算法题(上)
  • 对于牛客网—语言学习篇—编程初学者入门训练—函数类型:BC156 牛牛的数组匹配及BC158 回文数解析
  • 美食推荐|美食推荐小程序|基于微信小程序的美食推荐系统设计与实现(源码+数据库+文档)
  • GPFS性能优化
  • Skywork:昆仑万维推出天工超级智能体
  • vue3 表单项不对齐的解决方案
  • Custom SRP - LOD and Reflections
  • 【AI】常见8大LLM大语言模型地址