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

LeetCode 169. 多数元素

LeetCode 169. 多数元素

难度:easy\color{Green}{easy}easy


题目描述

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

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

示例 1:

输入:nums = [3,2,3]
输出:3

示例 2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

提示:

  • n==nums.lengthn == nums.lengthn==nums.length
  • 1<=n<=5∗1041 <= n <= 5 * 10^{4}1<=n<=5104
  • −109<=nums[i]<=109-10^{9} <= nums[i] <= 10^{9}109<=nums[i]<=109

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


算法1

(哈希)

使用 C++ 提供的 unordered_map 记录每个元素出现的次数。
遍历过程在,如果次数大于 n/2,则返回该数字即可。

复杂度分析

  • 时间复杂度unordered_map 单次插入和查询的时间复杂度为 O(1)O(1)O(1),故总时间复杂度为 O(n)O(n)O(n)

  • 空间复杂度 : 至少需要额外的 O(n)O(n)O(n) 的空间。

C++ 代码

class Solution {
public:int majorityElement(vector<int>& nums) {unordered_map<int, int> hash;int n = nums.size();int res = 0;for (int i = 0; i < n; i ++) {hash[nums[i]] ++;if (hash[nums[i]] > n / 2) res = nums[i];}return res;}
};

算法2

(投票算法)

  1. 定义 cnt 计数器,初始为 0candidate 记录答案。
  2. 从头开始遍历数组,若发现 cnt == 0,则 candidate := nums[i];然后若 candidate == nums[i]cnt++;否则 cnt--
  3. 遍历结束后,若数组中存在主要元素,则主要元素必定是 candidate

复杂度分析

  • 时间复杂度:仅遍历一次数组,故时间复杂度为 O(n)O(n)O(n)

  • 空间复杂度 : 仅使用了两个变量,故需要 O(1)O(1)O(1) 的额外空间。

C++ 代码

class Solution {
public:int majorityElement(vector<int>& nums) {int cnt = 0, candidate;for (int i = 0; i < nums.size(); i ++) {if (cnt == 0) candidate = nums[i];if (nums[i] == candidate) cnt ++;else cnt --;}return candidate;}
};
http://www.lryc.cn/news/22428.html

相关文章:

  • 来了,metaIPC1.0
  • WireShark如何进行USB包协议分析
  • 蒙特卡洛随机模拟
  • Android从屏幕刷新到View的绘制(三)之Handler异步消息与同步屏障
  • 最新版axios@1.3.x取消请求-AbortController-初体验-番茄出品
  • Git的简述
  • webpack实战,手写loader和plugin
  • STM32CubeMX按键模块化 点灯
  • C#专栏目录(长期更新)
  • BurpSuite配置抓取HTTPS数据包
  • 图片转base64格式返回给前端,前端如何展示?
  • C++入门知识【超详解】
  • 零基础、非计算机系学Python该如何上手?
  • 关于 vue3 模板引用
  • Redis | 安装Redis和启动Redis服务
  • 博客要考虑的最佳WordPress主题
  • C 学习笔记 —— 函数指针
  • FastDDS-3. DDS层
  • 9.2 IGMPv2
  • 巨头混战,抢着“兜底”自动驾驶安全
  • RightCapital 第一轮面试题
  • Python曲线肘部点检测-膝部点自动检测
  • 【算法题】最大矩形面积,单调栈解法
  • 活动策划|深度分析年货节活动该如何策划!
  • Idea启动遇到 Web server failed to start. Port 8080 was already in use. 报错
  • Python3中zip()函数知识点总结
  • 过滤器,监听器,拦截器的原理与在Servlet和Spring的应用
  • minio spring boot 秒传、分片上传、断点续传文件实现
  • MTK平台使用Omnipeek分析空口协议讲解
  • string和自动推断类型