【面试题常考!!!】JZ39 数组中出现次数超过一半的数字【五种方法解决】

news/2024/5/21 7:02:01/文章来源:https://blog.csdn.net/m0_63571404/article/details/127270227

欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
字体风格:
红色文字表示:重难点
蓝色文字表示:思路以及想法

JZ39 数组中出现次数超过一半的数字【五种方法解决】

    • 方法一:哈希法
    • 方法二:排序求中间值
    • 方法三:抵消法
    • 方法四:利用快排的思想
    • 方法五:target-other>=1

在这里插入图片描述
思路:

  1. 首先,我们要清楚我们要找的是数组中,出现次数为大于数组个数一半的数
  2. 我们的第一个想法就是,建立一个个数与最大value值相等的数组A,然后遍历所给数组,出现一个值,就在数组A中相应的位置+1,最后,我们遍历数组A找到要求的值。但是这个需要很大的空间复杂度,和时间复杂度。
  3. 怎么优化呢?首先看着数组A,想优化,我们想到把数组A中数值为0的,都省略去。我们发现,省略后的数组A,其实就是在原数组上,进行了一个从小到大的排序!那么优化就出来了,我们只需要把原数组从新重排序,然后位于数组中间的值,出现的次数,一定是出现次数大于数组的一半。(题中说了,所给的数组一定有一个值,出现了一半多!)
  4. 既然用排序了,并且要找到中间位置,我们可以理解,中间位置的数,一定是这个数组,数值大小位于中间的数,所以我们可以直接采取快速排序,这样就可以直接找到
  5. 我们再继续想,还是数组A,既然已经删去了数值为0的位置,剩余的,很像map,所以我们也可以用map进行存储哦!
  6. 大佬思想:为方法4,5。可以看代码

方法一:哈希法

public static int solution1(int[] arr){//利用map的key value模型来存放arr[i]和相对应出现的次数HashMap<Integer,Integer> map=new HashMap<>();for(int i=0;i<arr.length;i++){if(map.containsKey(arr[i])){map.put(arr[i],map.get(arr[i])+1);//已经存在就给value加1}else{map.put(arr[i],1);}}for(Map.Entry<Integer,Integer> entry:map.entrySet()){if(entry.getValue()>arr.length/2){return entry.getKey();}}return 0;}

方法二:排序求中间值

 public static int solution2(int[] arr){//先对数组排序,如果这个数存在,那它一定在arr[mid]的位置,Arrays.sort(arr);int count=0;int mid=arr.length/2;for(int i=0;i<arr.length;i++){if(arr[i]==arr[mid]){count++;}}if(count>mid){//出现的次数超过mid,则返回它;return arr[mid];}return 0;}

方法三:抵消法

public static int solution3(int[] arr){//抵消法:将target和其他元素进行抵消,由于target出现的次数大于别的元素,所以最后剩下的就是我们要找的//1,4,5,7,2,4,5,4,6,4,5,4,4,4,4int target=arr[0];//target先设为arr[0];int times=1;for(int i=0;i<arr.length;i++){if(times==0){//重新设置target=arr[i];times=1;}else{if(arr[i]==target){times++;} else {times--;}}}return target;}

方法四:利用快排的思想

 public static int solution4(int[] arr){int low=0;int high=arr.length-1;int mid=(high-low)/2;int index=partition(arr,low,high);while(index!=arr.length/2){if(index<arr.length/2){low=index+1;index=partition(arr,low,high);}else{high=index-1;index=partition(arr,low,high);}}int num=arr[index];int times=0;for(int i=0;i<arr.length;i++){if(arr[i]==num){times++;}}if(times*2>arr.length){return num;}return 0;}public static int partition(int[] arr,int low,int high){int key=arr[low];while(low<high){while(low<high&&arr[high]>=key){high--;}int temp=arr[low];arr[low]=arr[high];arr[high]=temp;while(low<high&&arr[low]<=key){low++;}temp=arr[low];arr[low]=arr[high];arr[high]=temp;}return low;}

方法五:target-other>=1

public  static int solution(int[] arr){int count=0;int aws=0;for(int i=0;i<arr.length;i++){if(count==0){aws=arr[i];}if(arr[i]==aws){count++;} else {count--;}}return aws;}

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

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

相关文章

神经网络模型数据处理,神经网络模型参数辨识

1、有哪些深度神经网络模型&#xff1f; 目前经常使用的深度神经网络模型主要有卷积神经网络(CNN) 、递归神经网络(RNN)、深信度网络(DBN) 、深度自动编码器(AutoEncoder) 和生成对抗网络(GAN) 等。 递归神经网络实际.上包含了两种神经网络。一种是循环神经网络(Recurrent Neu…

STM32F4单片机读取AT24c02

​STM32F4是由ST&#xff08;意法半导体&#xff09;开发的一种高性能微控制器系列。其采用了90nm的NVM工艺和ART技术&#xff08;自适应实时存储加速器&#xff0c;Adaptive Real-Time MemoryAccelerator™&#xff09; AT24C02是Atmel公司出品的一个2K位串行CMOS E2PROM&…

【k8s】五、Pod生命周期(一)

目录 前言 Pod生命周期 Pod 相位 状态值 挂起&#xff08;Pending&#xff09; 运行中&#xff08;Running&#xff09; 成功&#xff08;Succeeded&#xff09; 失败&#xff08;Failed&#xff09; 未知&#xff08;Unknown&#xff09; Init Containers Init Cont…

pc端引擎颠覆电脑兼容性

张小龙曾在讲座上阐述小程序理念的精髓&#xff0c;小程序承载着张小龙及微信团队对未来程序形态的一种见解&#xff0c;总结为五个字&#xff1a;所见即所得。原文如下&#xff1a; 它是一种真正的所见即所得的形态&#xff0c;我说的所见即所得不同于在PC时代&#xff0c;我…

组合模式+桥接模式

目录 组合模式 定义&#xff1a; 业务实现例子&#xff1a; 桥接模式 JDBC中的桥接模式 组合模式 定义&#xff1a; 将对象组合通过树形结构进行展示&#xff0c;使得用户——>不管对单个对象or组合对象的使用具有一致性 可以理解为部分-整体模式——>简单来说就…

深度学习环境搭建

(1) 安装 Anaconda :建立 Python 应用环境 安装成功界面如下:(2) Visual Studio Code: 建立代码编辑环境 1.安装Python扩展2.选择合适的Python解释器 3.安装下列应用扩展:codeRunner : 快速运行程序 Jupyter : 交互式运行程序 Pylance : 高效代码提示 安装完成如图所示:4.创…

Linux基础组件之muduo日志库分析

muduo日志库分析异步日志机制双缓存机制前台日志写入栈后台日志(落盘)写入栈使用示例总结后言异步日志机制 #mermaid-svg-nrIugWYiOaAGFTWH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nrIugWYiOaAGFTWH .error-…

如何做架构规划

文章目录架构师的职责WhyWhatHow架构活动生命周期环境搭建目标确认可行性探索架构规划统一语义需求确认任务边界划分确认规划完整性项目启动阶段性价值交付复盘经历过的典型案例参考架构师的职责 Why 互联网架构活动的挑战较多&#xff0c;如&#xff1a; 反射式的研发行为。…

Scratch软件编程等级考试四级——20200913

Scratch软件编程等级考试四级——20200913理论单选题判断题实操奇偶之和创意画图数字之和用逗号分隔列表数字反转理论 单选题 1、执行下面程序&#xff0c;输入4和7后&#xff0c;角色说出的内容是&#xff1f;&#xff08;&#xff09; A、4&#xff0c;7 B、7,7 C、7,4 D、…

为什么会发生云中断?如何防范?

IT 越依赖云服务&#xff0c;用户就越有可能因云中断而遭受停机和收入损失。由于云中断事件的发生&#xff0c;超过 60% 的使用公共云的组织在 2022 年报告了损失&#xff0c;因此云中断并不是公司不太可能面临的异常事件。 但是中断是否足以成为永远离开云的理由?还是应该坚持…

《安富莱嵌入式周报》第286期:8bit浮点数规范,VxWorks火星探测器故障原因修复,Matter V1.0智能家居规范,Wireshark 4.0发布

往期周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 目录 视频版&#xff1a; 1、SIA全球半导体行业协会统计显示全球芯片市场增长放缓&#xff0c;中国市场下跌10% …

程序员如何高效准备简历和面试03:诊断:简历为什么被忽视?

你好&#xff0c;欢迎学习课时3&#xff0c;我是你的职场导师吴文娟。 这节课主要为后面教你写简历做个铺垫&#xff0c;学习内容只有2个字&#xff1a;挑错。一个大家比较喜欢的事。我们来敲黑板看一些反面典型&#xff0c;案例都是我截取之前诊断过的简历&#xff0c;讲一讲为…

Mac电脑图片后期处理Lightroom Classic 2022(lrc2022)

Lightroom Classic 2022具有非常强大的图像处理功能&#xff0c;甚至对照片的一些修饰也可以完成&#xff0c;例如去除不要的物体、校正照片和增强照片颜色等。Lightroom Classic 2022 Mac版为用户提供了各种满足优秀摄影效果所需的编辑工具。让您能够轻松提亮颜色、使灰暗的摄…

C++ Builder XE TChart动态添加N个线条TLineSeries变化

// LARGE_INTEGER litmp; LONGLONG QPart1,QPart2; double dfMinus, dfFreq, dfTim; QueryPerformanceFrequency(&litmp); dfFreq (double)litmp.QuadPart;// 获得计数器的时钟频率 QueryPerformanceCounter(&litmp)…

STM32:外部中断控制旋转编码器并计次

1.主函数(main.c)代码部分&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h" #include "Encoder.h" int16_t Num; int main(void) { OLED_Init(); OLED_Sh…

第十四届蓝桥杯备赛模板题——蓝桥部队 (带权并查集)

目录1.蓝桥部队1. 问题描述2.输入格式3.输入样例4.样例答案5.原题连接2.解题思路3.Ac_code1.蓝桥部队 1. 问题描述 小明是蓝桥部队的长官&#xff0c;他的班上有 NNN 名军人和 111 名军师。 这天&#xff0c;NNN 名军人在操场上站成一排&#xff0c;起初编号为 iii 的军人站…

JPA EntityManager 获取关联对象

今天尝试了几种方式&#xff0c;来获取关联对象。 关联对象&#xff0c;使用的 OneToMany(fetchFetchType.EAGER) 下面给一下总结&#xff1a; 一 Example 毫无疑问&#xff0c;很有信心&#xff0c;Example可以关联到对象。 事实也是这样。 但是Example好像只有and关系…

公众号网课题库系统-轻易获取查题接口

公众号网课题库系统-轻易获取查题接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击…

Mindquantum实现变分量子奇异值分解

论文题目&#xff1a;Variational Quantum Singular Value Deposition(VQSVD) 项目介绍 复现过程 案例1&#xff1a;分解随机生成的8*8复数矩阵 先引入需要使用的包&#xff1a; import os os.environ[OMP_NUM_THREADS] 1​ import mindspore as ms from mindquantum impo…

Transformer解读之:Transformer 中的 Attention 机制

encoder 的 attention 场景&#xff1a;现在要训练的内容是 I love my dog -> 我喜欢我的狗那么在 encoder 端的输入是&#xff1a; I love my dog&#xff1b;假设经过 embedding 和位置编码后&#xff0c;I love my dog 这句话肯定已经变成了一个向量&#xff0c;但是在这…