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

Leetcode面试经典150_Q169多数元素

题目:

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

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

解题思路:

1. 注意“大于 ⌊n/2⌋”,因此在将数据排序之后一定可以在⌊n/2⌋的下标位置找到该数字;

2. 哈希映射存储每个元素及其出现的次数;

3. 由于列表中有众数,随机挑选下标并验证;

4. 分治“如果数 a 是数组 nums 的众数,如果我们将 nums 分成两部分,那么 a 必定是至少一部分的众数”

5. Boyer-Moore 投票:维护一个候选众数 candidate 和它出现的次数 count。初始时 candidate 可以为任意值,count 为 0;遍历数组 nums 中的所有元素,对于每个元素 x,在判断 x 之前,如果 count 的值为 0,我们先将 x 的值赋予 candidate,随后我们判断 x;如果 x 与 candidate 相等,那么计数器 count 的值增加 1x 与 candidate 不等,那么计数器 count 的值减少 1;在遍历完成后,candidate 即为整个数组的众数


Python 解法:

class Solution: # 分治def majorityElement(self, nums: List[int]) -> int:def majority_element_rec(lo, hi) -> int:# base case; the only element in an array of size 1 is the majority# element.if lo == hi:return nums[lo]# recurse on left and right halves of this slice.mid = (hi - lo) // 2 + loleft = majority_element_rec(lo, mid)right = majority_element_rec(mid + 1, hi)# if the two halves agree on the majority element, return it.if left == right:return left# otherwise, count each element and return the "winner".left_count = sum(1 for i in range(lo, hi + 1) if nums[i] == left)right_count = sum(1 for i in range(lo, hi + 1) if nums[i] == right)return left if left_count > right_count else rightreturn majority_element_rec(0, len(nums) - 1)class Solution: # 投票def majorityElement(self, nums: List[int]) -> int:count = 0candidate = Nonefor num in nums:if count == 0:candidate = numcount += (1 if num == candidate else -1)return candidate

http://www.lryc.cn/news/335087.html

相关文章:

  • Spring Cloud微服务入门(五)
  • 负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测
  • SpringBoot整合Spring Data JPA
  • 机器学习(五) -- 监督学习(2) -- k近邻
  • 【.NET全栈】ZedGraph图表库的介绍和应用
  • vivado 设计调试
  • Python3 replace()函数使用详解:字符串的艺术转换
  • 【C++】用红黑树封装map和set
  • 一些好玩的东西
  • 微电网优化:基于巨型犰狳优化算法(Giant Armadillo Optimization,GAO)的微电网优化(提供MATLAB代码)
  • java锁
  • QA测试开发工程师面试题满分问答6: 如何判断接口功能正常?从QA的角度设计测试用例
  • vue 双向绑定
  • python--异常处理
  • element-ui result 组件源码分享
  • VRRP虚拟路由实验(思科)
  • SpringBoot通用模块--文件上传开发(阿里云OSS)
  • Fecify 商品标签功能
  • openstack中windows虚拟机时间显示异常问题处理
  • 很牛的一套仓库管理系统,免费复用【带源码】
  • Spark 部署与应用程序交互简单使用说明
  • 【二分查找】Leetcode 点名
  • JS中的运算符
  • Webots常用的执行器(Python版)
  • mySql数据库学习002-表数据查询操作
  • 【STL】stack与queue的底层原理及其实现
  • Ai大模型如何应用到机器视觉系统中
  • IntelliJ IDEA下载及安装教程(Windows操作系统)
  • 01 Python进阶:正则表达式
  • pdf图片识别分类