leetcode 面试经典 150 题:多数元素

链接多数元素
题序号169
题型数组
解法1. 排序法、2. Boyer-Moore投票算法
难度简单
熟练度✅✅✅✅✅

题目

  • 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。

  • 你可以假设数组是非空的,并且给定的数组总是存在多数元素。

  • 示例 1:
    输入:nums = [3,2,3]
    输出:3

  • 示例 2:
    输入:nums = [2,2,1,1,1,2,2]
    输出:2

  • 提示:
    n == nums.length
    1 <= n <= 5 * 104
    -109 <= nums[i] <= 109

  • 进阶:
    尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。

题解

排序法

  1. 核心要点:先排序,下标n/2的位置一定是多数元素,复杂度根据排序算法的复杂度来。
  2. 复杂度:排序算法的时间复杂度通常是 O(n log n),其中 n 是数组的长度。这意味着对于大型数组,排序方法可能比 Boyer-Moore 投票算法慢,后者的时间复杂度为 O(n)。
  3. c++ 实现算法
//排序法
class Solution2 {
public:int majorityElement(vector<int>& nums) {sort(nums.begin(), nums.end());return (nums[nums.size()/2]);}
};

Boyer-Moore投票算法

  1. Boyer-Moore投票:Boyer-Moore投票算法是一种用于在数组中找出出现次数超过一半的元素(即多数元素)的高效算法。这个算法由Robert S. Boyer和J Strother Moore于1981年提出。算法的核心思想是通过两次遍历数组的过程来找出多数元素。
  2. 核心要点:该题适合使用Boyer-Moore投票算法,即在一个序列中找出一个出现次数超过n/2的元素(如果存在的话)。
  3. 复杂度:时间复杂度 O(n), 空间复杂度 O(1)
  4. c++ 实现算法
class Solution {
public:int majorityElement(vector<int>& nums) {int count = 0;int candidate = 0;for(int i = 0; i < nums.size(); i++){if(count == 0){candidate = nums[i];}count += (candidate == nums[i]) ? 1 : -1;}return candidate;}
};
  1. 推演
  • 假设我们有一个数组 nums = [3, 2, 3]:

  • 初始化:count = 0,candidate = 0。

  • 遍历 nums[0] = 3:
    count 为0,所以将 nums[0] 设为 candidate,即 candidate = 3,count = 1。

  • 遍历 nums[1] = 2:
    nums[1] 与 candidate 不同,count 减1,count = 0。

  • 遍历 nums[2] = 3:
    count 为0,所以将 nums[2] 设为 candidate,即 candidate = 3,count = 1。

  • 遍历结束后,candidate = 3,这是数组中的多数元素。

完整demo

#include <iostream>
#include <vector>
#include <algorithm>using namespace std;class Solution {
public:int majorityElement(vector<int>& nums) {int count = 0;int candidate = 0;for(int i = 0; i < nums.size(); i++){if(count == 0){candidate = nums[i];}count += (candidate == nums[i]) ? 1 : -1;}return candidate;}
};//排序法
class Solution2 {
public:int majorityElement(vector<int>& nums) {sort(nums.begin(), nums.end());return (nums[nums.size()/2]);}
};int  main(){vector <int> nums = {3, 2, 3};Solution2 solution;int element = solution.majorityElement(nums);cout << "major elemet: " << element << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/66418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulnhub靶场-potato(至获取shell)

arp-scan -l 扫描IP 使用御剑端口扫描扫描端口&#xff0c;扫到了80和7120两个端口&#xff0c;其中7120为ssh端口 使用dirb http://192.168.171.134 扫描目录 发现info.php 访问为phpinfo界面 访问192.168.171.134为一个大土豆&#xff0c;没什么用 所以我们从ssh入手 盲…

Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8

在 Windows 11 上通过 WSL (Windows Subsystem for Linux) 安装 MySQL 8 的步骤如下&#xff1a; ✅ 1. 检查 WSL 的安装 首先确保已经安装并启用了 WSL 2。 &#x1f527; 检查 WSL 版本 打开 PowerShell&#xff0c;执行以下命令&#xff1a; wsl --list --verbose确保 W…

信息科技伦理与道德2:研究方法

1 问题描述 1.1 讨论&#xff1f; 请挑一项信息技术&#xff0c;谈一谈为什么认为他是道德的/不道德的&#xff0c;或者根据使用场景才能判断是否道德。判断的依据是什么&#xff08;自身的道德准则&#xff09;&#xff1f;为什么你觉得你的道德准则是合理的&#xff0c;其他…

IoC设计模式详解:控制反转的核心思想

前言&#xff1a;在软件开发中&#xff0c;设计模式是一种经过验证的、在特定场景下能有效解决问题的解决方案。控制反转&#xff08;Inversion of Control&#xff0c;IoC&#xff09; 作为一种设计模式&#xff0c;通过让程序的控制流和对象管理反转&#xff0c;从而使得代码…

unity团结云下载项目

今天开plastic scm发现它云服务好像停了哈&#xff0c;在hub里下载云端项目也不会出现在项目列表里&#xff0c;之前也有发邮件说让提前迁移到团结云。打开云仓库会弹这个&#xff0c;大概就是plastic scm无法解析域名地址吧 研究了一下团结云咋使&#xff0c;官方手册看半天也…

【Vue】获取el-select修改前后的数据

一、场景 使用下拉组件(el-select)开发时&#xff0c;遇到一种场景&#xff0c;修改下拉选项时需要弹窗让用户二次确认&#xff0c;确定后才能更新新值&#xff0c;取消页面则需要回复原数据。 二、解决方案 1. el-select 增加 ref属性&#xff0c;并修改change方法 <el-…

学习echarts折线图tooltip属性的背景颜色方法

学习echarts折线图tooltip属性的背景颜色方法 在 ECharts 中&#xff0c;要设置折线图的 tooltip 背景颜色&#xff0c;你需要使用 tooltip 组件的 backgroundColor 属性。以下是一个简单的例子&#xff0c;展示了如何设置 tooltip 背景色&#xff1a; option {tooltip: {tri…

ros2笔记-3.2python 话题订阅与发布

3.1 话题通信介绍 话题发布订阅模型&#xff0c;有4个关键点&#xff1a;发布者、订阅者、话题名称、话题类型 bohubohu-TM1701:~$ ros2 node info /turtlesim There are 2 nodes in the graph with the exact name "/turtlesim". You are seeing information abou…

python常见绘图及代码

一、引言 在数据驱动的时代&#xff0c;将数据转化为直观的图形对于理解数据、发现模式和传达信息至关重要。Python作为一种功能强大且广受欢迎的编程语言&#xff0c;拥有丰富的绘图库&#xff0c;能满足不同场景下的数据可视化需求。本文将深入探讨Python中常见的绘图程序&am…

GWAS数据和软件下载

这部分主要是数据获取,以及软件配置方法。 一、配套数据和代码 数据和代码目前在不断的更新,最新的教程可以私信,我通过后手动发送最新版的pdf和数据代码。发送的压缩包,有电子版的pdf和数据下载链接,里面是最新的百度网盘的地址,下载到本地即可。然后根据pdf教程,结合配套的…

【pytorch-lightning】架构一览

pytorch-lightning是基于pytorch的一个套壳项目&#xff0c;适配pytorch的版本同步更新速度很快。 它将训练的几个主要流程模块化&#xff0c;减少重复工作&#xff0c;同时让支持分布式训练&#xff0c;不同平台的训练迁移变得更加简单。 官网链接

Uniapp Android 本地离线打包(详细流程)

一、简介 App 离线 SDK 暂时不支持 Kotlin&#xff0c;未来不清楚。 uniapp 提供了 云打包 与 本地打包 两种方案&#xff0c;云打包 需要排队且还有次数限制&#xff0c;本地打包 则就没有这些限制&#xff0c;而且会 本地打包 对开发 原生插件 有很大的帮助。 细节&#x…

NeurIPS 2024 | 像素级LLM实现图像视频理解、生成、分割和编辑大统一(昆仑万维等)

Accepted by NeurIPS 2024 文章链接&#xff1a;https://arxiv.org/pdf/2412.19806 项目链接&#xff1a;https://vitron-llm.github.io/ Github链接&#xff1a;https://github.com/SkyworkAI/Vitron 亮点直击 首次提出了一种通用的视觉多模态大语言模型&#xff08;MLLM&…

AMP 混合精度训练中的动态缩放机制: grad_scaler.py函数解析( torch._amp_update_scale_)

AMP 混合精度训练中的动态缩放机制 在深度学习中&#xff0c;混合精度训练&#xff08;AMP, Automatic Mixed Precision&#xff09;是一种常用的技术&#xff0c;它利用半精度浮点&#xff08;FP16&#xff09;计算来加速训练&#xff0c;同时使用单精度浮点&#xff08;FP32…

细说STM32F407单片机FSMC连接外部SRAM的方法及HAL驱动

目录 一、FSMC连接外部SRAM的原理 1、 FSMC控制区域的划分 2、SRAM芯片与MCU的连接 二、访问外部SRAM的HAL驱动程序 1、外部SRAM初始化与控制 2、外部SRAM读写函数 3、直接通过指针访问外部SRAM 4、DMA方式读写外部SRAM 本文介绍STM32F407单片机FSMC连接外部SRAM及以轮…

react axios 优化示例

使用 axios 是 React 项目中非常常见的 HTTP 请求库。为了提升 axios 在 React 中的性能、可维护性和用户体验,我们可以从 代码组织、请求优化 和 用户体验优化 多个角度进行详细的优化。 一、安装与基础配置 安装 axios npm install axios创建 Axios 实例 为了更好地管理…

Java mysql根据很长的富文本如何自动获取简介

在Java应用程序中&#xff0c;根据很长的富文本自动生成简介是一个常见的需求。富文本通常包含HTML标签、格式化信息等&#xff0c;因此处理富文本以提取简介需要对文本进行解析和处理。以下是实现这一功能的详细步骤&#xff0c;包括如何从富文本中提取纯文本&#xff0c;并生…

Gitee图形界面上传(详细步骤)

目录 1.软件安装 2.安装顺序 3.创建仓库 4.克隆远程仓库到本地电脑 提交代码的三板斧 1.软件安装 Git - Downloads (git-scm.com) Download – TortoiseGit – Windows Shell Interface to Git 2.安装顺序 1. 首先安装git-2.33.1-64-bit.exe&#xff0c;顺序不能搞错2. …

基于单片机洗衣机控制器的设计(论文+源码)

1需求分析 在智能洗衣机系统设计中&#xff0c;考虑到洗衣机在实际应用过程中&#xff0c;需要满足用户对于不同衣物清洁、消毒的应用要求&#xff0c;对设计功能进行分析&#xff0c;具体如下&#xff1a; 通过按键实现洗衣机不同工作模式的切换&#xff0c;包括标准模式&…

【学Rust开发CAD】2 创建第一个工作空间、项目及库

文章目录 一、 创建工作空间二、新建项目&#xff08;可执行文件&#xff09;三、 新建库&#xff08;库文件&#xff09;四、更新项目依赖五、编写代码七、总结 在 Rust 中&#xff0c;工作空间&#xff08;workspace&#xff09;允许你管理多个相关的包&#xff08;crate&…