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

【力扣-多数元素 JAVA/Python】

题目描述

在这里插入图片描述

解题思路:

数组中出现次数超过一半的数字
有两种解法:
1、把数组排序,中位数一定是众数
2、Boyer-Moore 投票算法: 票数正负抵消,时间O(N) 空间复杂度O(1) 所以用这个解法最合适。

🔍 举例

数组:[2,2,1,1,1,2,2]

初始:candidate=2, count=1

遍历:

  • 遇到 2 → 相同 → count=2

  • 遇到 1 → 不同 → count=1

  • 遇到 1 → 不同 → count=0 → 换候选人 = 1, count=1

  • 遇到 1 → 相同 → count=2

  • 遇到 2 → 不同 → count=1

  • 遇到 2 → 不同 → count=0 → 换候选人 = 2, count=1

  • 最后 candidate=2,它就是多数元素 ✅

流程图如下:

在这里插入图片描述

代码如下:

python版本

class Solution(object):def majorityElement(self, nums):""":type nums: List[int]:rtype: int"""count = 0person = Nonefor i in range(len(nums)):if count == 0:person = nums[i]count = 1elif person == nums[i]:count += 1else:count -= 1return person                

java版本

class Solution {public int majorityElement(int[] nums) {int count  = 1, person = nums[0];for(int i = 1; i < nums.length ; i ++){if(count == 0){person =  nums[i];count = 1;}else if(nums[i] == person){count++;}else{count--;}}return person;}
}
http://www.xdnf.cn/news/18112.html

相关文章:

  • GaussDB 数据库架构师修炼(十三)安全管理(4)-数据库审计
  • Reading Coach-微软推出的免费AI阅读教练
  • 洛谷B3924 [GESP202312 二级] 小杨的H字矩阵
  • Wi-Fi 7 将如何重塑互联工作场所
  • Linux软件编程:进程与线程(线程的传参、属性、通信(互斥锁、信号量))
  • 存储、硬盘、文件系统、 IO相关常识总结
  • Boost库核心组件与应用
  • 图论Day4学习心得
  • MyBatis极速通关中篇:核心配置精讲与复杂查询实战
  • MATLAB R2010b系统环境(二)MATLAB环境的准备
  • 分享一个Oracle表空间自动扩容与清理脚本
  • Docker小游戏 | 使用Docker部署人生重开模拟器
  • 34 HTB Cat 机器 - 中等难度
  • 洛谷B3836 [GESP202303 二级] 百鸡问题
  • Hana IDE 安装吧报错
  • 每日算法刷题Day62:8.16:leetcode 堆8道题,用时2h30min
  • 【数据分享】大清河(大庆河)流域上游土地利用
  • GCN图卷积神经网络的Pytorch实现
  • 摩搭api 实现
  • 【最后203篇系列】032 OpenAI格式调用多模型实验
  • 博弈论07——Lemke-Howson 算法
  • Redis入门与背景详解:构建高并发、高可用系统的关键基石
  • SpringBoot自动配置原理(二)
  • [Linux] RAID存储技术
  • TDengine 3.3.7.0 版新功能(BLOB 数据类型)
  • LangGraph实战指南:如何构建一个深度研究Agent
  • 测试工程师的AI转型指南:从工具使用到测试策略重构
  • MySQL 配置性能优化赛技术指南
  • H20芯片与中国的科技自立:一场隐形的博弈
  • K8S HPA 弹性水平扩缩容 Pod 详解