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

剑指offer39.数组中出现次数超过一半的数字

这个题非常简单,解法有很多种,我用的是HashMap记录每个元素出现的次数,只要次数大于数组长度的一半就返回。下面是我的代码:

class Solution {public int majorityElement(int[] nums) {int len = nums.length/2;HashMap<Integer,Integer> map = new HashMap<Integer, Integer>();for(int i=0;i<nums.length;i++){int key = nums[i];if(!map.containsKey(key)){map.put(key,1);if(map.get(key) > len) return key;}else{map.put(key,map.get(key)+1);if(map.get(key) > len) return key;}}return -1;}
}

题解还有一种更牛逼的解法,把数组排序,然后返回数组中间的那个数就行,因为如果这个数出现的次数大于数组长度的一半的话,排完序后数组中间那个数一定是它。

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length/2];}
}

还有用分治法的,如果一个数是这个数组的总数,那么把这个数组分成两个子数组后,这个数至少是其中一个数组的众数,然后选出两个众数中真正的众数即可。可以采用递归的方法,不断把数组分成两个子数组,直到子数组的长度为1,合并左右两个数组,然后再不断合并,最后就可以找到整个数组的众数了

class Solution {private int countInRange(int[] nums, int num, int lo, int hi) {int count = 0;for (int i = lo; i <= hi; i++) {if (nums[i] == num) {count++;}}return count;}private int majorityElementRec(int[] nums, int lo, int hi) {// 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.int mid = (hi - lo) / 2 + lo;int left = majorityElementRec(nums, lo, mid);int right = majorityElementRec(nums, 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".int leftCount = countInRange(nums, left, lo, hi);int rightCount = countInRange(nums, right, lo, hi);return leftCount > rightCount ? left : right;}public int majorityElement(int[] nums) {return majorityElementRec(nums, 0, nums.length - 1);}
}

还有一种Boyer-Moore 投票算法,他是先选一个候选数,先把他的次数定为0,如果下一个数和他一样次数加一,如果不一样次数减一,如果次数为0,侯选数换成下一个数,最后的侯选数就是众数。

class Solution {public int majorityElement(int[] nums) {int count = 0;Integer candidate = null;for (int num : nums) {if (count == 0) {candidate = num;}count += (num == candidate) ? 1 : -1;}return candidate;}
}

相关文章:

剑指offer39.数组中出现次数超过一半的数字

这个题非常简单&#xff0c;解法有很多种&#xff0c;我用的是HashMap记录每个元素出现的次数&#xff0c;只要次数大于数组长度的一半就返回。下面是我的代码&#xff1a; class Solution {public int majorityElement(int[] nums) {int len nums.length/2;HashMap<Integ…...

spring技术栈面试题

1 Spring支持的事务管理类型有哪些&#xff1f;你在项目中使用哪种方式&#xff1f; Spring支持两种类型的事务管理&#xff1a; 编程式事务管理&#xff1a;这意味你通过编程的方式管理事务&#xff0c;给你带来极大的灵活性&#xff0c;但是难维护。声明式事务管理&#x…...

Android Glide MemorySizeCalculator计算值,Kotlin

Android Glide MemorySizeCalculator计算值,Kotlin for (i in 100..1000 step 50) {val calculator MemorySizeCalculator.Builder(this).setMemoryCacheScreens(i.toFloat()).setBitmapPoolScreens(i.toFloat()).setMaxSizeMultiplier(0.8f).setLowMemoryMaxSizeMultiplier(0…...

KEIL自带的Jlink怎么升级更换版本

问题背景 V4.20以上的keil安装包中都自带Jlink驱动包&#xff0c;即当你安装了KEIL后&#xff0c;Debug或Download就是用的安装KEIL时附带安装的Jlink版本。 那如果存在这种情况&#xff0c;你正在开发的芯片比较新&#xff0c;只有比较新的Jlink驱动软件才能支持&#xff0c…...

图的遍历之 深度优先搜索和广度优先搜索

深度优先搜索的图文介绍 1. 深度优先搜索介绍 图的深度优先搜索(Depth First Search)&#xff0c;和树的先序遍历比较类似。 它的思想&#xff1a;假设初始状态是图中所有顶点均未被访问&#xff0c;则从某个顶点v出发&#xff0c;首先访问该顶点&#xff0c;然后依次从它的各…...

Java学习笔记27——file类

File类 概述和构造方法概述构造方法 File的创建功能File类判断和获取功能File的删除功能 概述和构造方法 概述 在java.io下 具体的类 file是文件和目录路径名的抽象表示 文件和目录是可以封装成对象的对于file而言&#xff0c;其封装的并不是真正存在的文件&#xff08;可以…...

细胞——求细胞数量 C++详解

细胞——求细胞数量 C详解 求细胞数量题目描述输入格式输出格式样例样例输入样例输出 提示数据规模与约定 解法代码 求细胞数量 题目描述 一矩形阵列由数字 0 0 0 到 9 9 9 组成&#xff0c;数字 1 1 1 到 9 9 9 代表细胞&#xff0c;细胞的定义为沿细胞数字上下左右若还…...

【计算机视觉】关于图像处理的一些基本操作

目录 图像平滑滤波处理均值滤波计算过程python实现 高斯滤波计算过程python实现 中值滤波计算过程python实现 图像的边缘检测Robert算子计算过程python实现 图像处理腐蚀算子计算过程python实现 Hog&#xff08;梯度方向直方图&#xff09;特征计算流程&#xff1a;Hog的特征维…...

Android Animation Made Easy

原文链接 Android Animation Made Easy 动画在任何一个GUI系统中都是一个非常重要的设计元素&#xff0c;它可以让交互变得优雅&#xff0c;让界面变得炫酷&#xff0c;让操作变得更加的舒畅&#xff0c;让状态过渡变得更加的顺滑&#xff0c;对视觉效果有极大的提升&#xff…...

56从零开始学Java之与字符串相关的正则表达式

作者&#xff1a;孙玉昌&#xff0c;昵称【一一哥】&#xff0c;另外【壹壹哥】也是我哦 千锋教育高级教研员、CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 在上一篇文章中&#xff0c;壹哥给大家介绍了String字符串及其各种常用API方法&#xff0c;接下来壹哥…...

STM32 定时器自动重装载寄存器ARR带来的影响,ARPE0和1区别

ARR是啥 自动重载寄存器是预装载的。对自动重载寄存器执行写入或读取操作时会访问预装载寄存器。预装载寄存器的内容既可以直接传送到影子寄存器&#xff0c;也可以在每次发生更新事件 (UEV) 时传送到影子寄存器&#xff0c;这取决于 TIMx_CR1 寄存器中的自动重载预装载使能位 …...

vue 把<style scoped lang=“less“> 单独写成less文件再导入使用

1 npm npm install less-loader --save-dev2 创建一个单独的 Less 文件&#xff0c;例如 app.less <style scoped lang"less"> import url(./app.less); </style>3 在 app.less 文件中&#xff0c;编写 Less 样式代码 .container {width: 500px;margi…...

C++ 字符串

C 字符串 一、字符串两种写法 c语言的写法&#xff0c;可以延用 const char* str1 "huang"; char str2[] "Hello, World!";c写法 std::string str "Hello, World!";二、字符串计算长度 c语言的计算字符串长度&#xff0c;需要导入库 #inc…...

springboot 报错处理(长期更新 2023.8.10)

目录 一、HTTP 相关1.1、 数据传输方面1.1.1、 HttpMessageNotWritableException1.1.1.1、 springboot + stomp 场景一、HTTP 相关 1.1、 数据传输方面 1.1.1、 HttpMessageNotWritableException 1.1.1.1、 springboot + stomp 场景 报错内容: 使用 spring boot 和 stomp 服…...

Maven出现报错 ; Unable to import maven project: See logs for details错误的多种解决方法

问题现象; IDEA版本&#xff1a; Maven 版本 &#xff1a; 3.3.9 0.检查 maven 的设置 &#xff1a;F:\softeware\maven\apache-maven-3.9.3\conf 检查setting.xml 配置 本地仓库<localRepository>F:\softeware\maven\local\repository</localRepository>镜像…...

33_windows环境debug Nginx 源码-安装WSL

文章目录 前言安装 WSL先决条件启用 windows 更新功能真正安装 WSL133_windows环境debug Nginx 源码-安装WSL前言 虽然很想在纯 windows 环境,基于windows 的生态完成debug,但现实情况是 由于Nginx 源码编写的很多内容都和 linux 更加耦合;且不说使用 Visual-Studio 安装 C/…...

Java中的ZooKeeper是什么?

Java中的ZooKeeper是一个开源的分布式协调服务&#xff0c;它可以帮助我们管理分布式系统中的数据和配置信息。ZooKeeper是由Facebook开发的一个开源项目&#xff0c;它被广泛用于Facebook的分布式系统。 ZooKeeper的名称来源于动物园管理员&#xff08;Zookeeper&#xff09;…...

【数学】CF1796 C

Problem - 1796C - Codeforces 题意&#xff1a; 思路&#xff1a; 模拟一下样例可以发现一些规律 Code&#xff1a; #include <bits/stdc.h>#define int long longusing i64 long long;constexpr int N 1e6 10; constexpr int mod 998244353;void solve() {int l…...

SCI论文中字体和图片字体大小的要求

SCI论文中字体和图片字体大小的要求 文章目录 1. American Chemical Society(ACS)要求2. Nature要求 1. American Chemical Society(ACS)要求 https://www.zhihu.com/question/380612293?utm_id0 2. Nature要求...

react-dnd的使用

介绍&#xff1a; React DnD&#xff08;Drag and Drop&#xff09;是一个用于实现拖放功能的 React 拓展库。它提供了一组用于构建可拖动和可放置组件的高阶组件和钩子函数。 使用&#xff1a; 安装 react-dnd 和 react-dnd-html5-backend&#xff1a; npm install react-d…...

重新定义窗口自由:SRWE如何解锁任意程序的分辨率限制

重新定义窗口自由&#xff1a;SRWE如何解锁任意程序的分辨率限制 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否曾因软件窗口无法调整到理想尺寸而感到束手无策&#xff1f;当游戏只支持有限分辨率、专业…...

波普尔:反教皇的“新教皇”——一场百年认知诈骗的终极揭露

波普尔&#xff1a;反教皇的“新教皇”——一场百年认知诈骗的终极揭露摘要波普尔以“反教皇”自居&#xff0c;实则上演了最隐蔽的学术独裁。他通过偷换“绝对真理”概念&#xff0c;将确定性真理污名化为教皇式专制&#xff0c;再借“可证伪性”自封科学裁判&#xff0c;垄断…...

Windows11 Camera 存储路径自定义与系统声音录制全攻略

1. Windows11 Camera存储路径自定义详解 每次用Windows11自带的Camera应用拍完照片或视频&#xff0c;是不是总在C盘里翻来覆去找文件&#xff1f;我刚开始用的时候也经常遇到这个问题&#xff0c;直到发现原来存储路径可以自定义。下面我就把摸索出来的完整操作流程分享给大家…...

从POC到千万QPS:构建可审计、可回滚、可横向对比的大模型评估指标体系(含金融/医疗双行业基线数据)

第一章&#xff1a;从POC到千万QPS&#xff1a;构建可审计、可回滚、可横向对比的大模型评估指标体系&#xff08;含金融/医疗双行业基线数据&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 在高合规性场景中&#xff0c;大模型评估不能止步于单次离线评测——它…...

统一支付网关架构解析:企业级多平台支付集成设计哲学

统一支付网关架构解析&#xff1a;企业级多平台支付集成设计哲学 【免费下载链接】pay 可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了 项目地址: https://gitcode.com/gh_mirrors/pa/pay 在数字化商业生态中&#xff0c;支付系统作…...

从GPT-4到行业大模型落地:我们踩过的11个A/B测试深坑,含流量隔离失效、跨版本指标不可比、反馈污染等独家复盘

第一章&#xff1a;大模型工程化中的A/B测试实践 2026奇点智能技术大会(https://ml-summit.org) 大模型上线后的效果验证不能依赖主观评估或离线指标&#xff0c;必须通过受控的线上流量分流与可归因的行为观测完成因果推断。A/B测试已成为大模型服务迭代中验证提示工程优化、…...

Windows效率神器PowerToys终极指南:30+免费工具快速提升工作效率

Windows效率神器PowerToys终极指南&#xff1a;30免费工具快速提升工作效率 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trending/po/…...

深入解读:SOEM配置汇川SV660N时,PDO映射与EtherCAT状态机的那些关键细节

深入解读&#xff1a;SOEM配置汇川SV660N时&#xff0c;PDO映射与EtherCAT状态机的那些关键细节 在工业自动化领域&#xff0c;EtherCAT协议因其高效性和实时性已成为运动控制系统的首选。然而&#xff0c;当工程师们在实际项目中配置汇川SV660N伺服驱动器时&#xff0c;常常会…...

LFM2.5-1.2B-Thinking-GGUF应用场景:快速生成产品介绍与文案

LFM2.5-1.2B-Thinking-GGUF应用场景&#xff1a;快速生成产品介绍与文案 1. 为什么选择LFM2.5-1.2B-Thinking生成商业文案 在电商和营销领域&#xff0c;每天需要产出大量产品介绍、广告文案和社交媒体内容。传统人工撰写方式不仅耗时耗力&#xff0c;还难以保持风格一致性。…...

为什么你的AI模型API文档总比代码慢3.2个迭代?揭秘头部AIGC公司正在封测的文档-代码双向绑定协议(RFC-AIDoc v0.9草案首曝)

第一章&#xff1a;AI原生软件研发自动化文档更新机制 2026奇点智能技术大会(https://ml-summit.org) AI原生软件研发范式正推动文档生命周期从“人工维护”跃迁至“语义驱动的实时同步”。其核心在于将代码、测试、API契约与自然语言描述统一建模为可推理的知识图谱&#xff…...