java数组个数无限_基于Java代码实现数字在数组中出现次数超过一半

下文通过几种方法给大家介绍java数组数字出现次数,具体内容如下所示:

方法一:

数组排序,然后中间值肯定是要查找的值。 排序最小的时间复杂度(快速排序)O(NlogN),加上遍历。

方法二:

使用散列表的方式,也就是统计每个数组出现的次数,输出出现次数大于数组长度的数字。

方法三:

出现的次数超过数组长度的一半,表明这个数字出现的次数比其他数出现的次数的总和还多。

考虑每次删除两个不同的数,那么在剩下的数中,出现的次数仍然超过总数的一般,不断重复该过程,排除掉其他的数,最终找到那个出现次数超过一半的数字。这个方法的时间复杂度是O(N),空间复杂度是O(1)。

换个思路,这个可以通过计数实现,而不是真正物理删除。在遍历数组的过程中,保存两个值,一个是数组中数字,一个是出现次数。当遍历到下一个数字时,如果这个数字跟之前保存的数字相同,则次数加1,如果不同,则次数减1。如果次数为0,则保存下一个数字并把次数设置为1,由于我们要找的数字出现的次数比其他所有数字出现的次数之和还要多,那么要找的数字肯定是最后一次把次数设为1时对应的数字。

public int MoreHalf(int[] nums) {

int result = 0;

int count = 1;

if (nums.length == 0)

return -1;

result = nums[0];

for (int i = 1; i < nums.length; i++) {

if (count == 0) {

result = nums[i];

count = 1;

continue;

}

if (result == nums[i])

count++;

else

count--;

}

return result;

}

方法四:

改进的快排,前面提到,如果对一个数组进行排序,位于中间位置的那个数字肯定是所求的值。对数组排序的时间复杂度是O(nlog(n)),但是对于这道题目,还有更好的算法,能够在时间复杂度O(n)内求出。

借鉴快速排序算法,其中的Partition()方法是一个最重要的方法,该方法返回一个index,能够保证index位置的数是已排序完成的,在index左边的数都比index所在的数小,在index右边的数都比index所在的数大。那么本题就可以利用这样的思路来解。

通过Partition()返回index,如果index==mid,那么就表明找到了数组的中位数;如果indexmid,表明中位数在[start,index-1]之间。知道最后求得index==mid循环结束。

public int Partition(int[] nums,int start,int end){

int pivotkey = nums[start];

int origin = start;

while(start

while(start=pivotkey) end--;

while(start

swap(nums,start,end);

}

swap(nums,start,end);

swap(nums,origin,end);

return end;

}

public int[] swap(int[] ints, int x, int y) {

int temp = ints[x];

ints[x] = ints[y];

ints[y] = temp;

return ints;

}

public int MoreThanHalf(int[] nums){

if(nums.length==0)

return -1;

int start = 0;

int end = nums.length-1;

int index = Partition(nums, start, end);

int mid = nums.length/2;

while(index!=mid){

if(index>mid)

//如果调整数组以后获得的index大于middle,则继续调整start到index-1区段的数组

index = Partition(nums, start, index-1);

else{

//否则调整index+1到end区段的数组

index = Partition(nums, index+1, end);

}

}

return nums[index];

}

以上内容给大家介绍了Java代码实现数字在数组中出现次数超过一半的相关内容,希望对大家有所帮助!

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

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

相关文章

java合并sheet行_java poi Excel循环合并行

//Java poi 实现循环合并行&#xff0c;还是第一次遇到这种问题//在网上查了很多资料&#xff0c;都不是自己想要的//以下为自己研究后&#xff0c;写的一点东西&#xff0c;给大家分享&#xff0c;希望对大家能有思路上的启发&#xff0c;也希望大家能提出宝贵意见&#xff0c…

java类中自定义函数的调用_关于方法:自定义类中对函数的未解析引用

我无法解决看似微不足道的问题。我的问题可能是缺乏对Kotlin语言的经验(和理解)。不过&#xff0c;我将需要帮助。我做了一个自定义类&#xff0c;其中包含一个自定义函数。看起来很简单&#xff0c;但是当我尝试使用此功能时&#xff0c;我一直收到"未解决的引用"错…

java正则表达式 分词_[Java]使用正则表达式实现分词

手工分词稍嫌麻烦&#xff0c;不好维护&#xff0c;而利用正则表达式就利索多了。Java提供了java.util.regex.Matcher&#xff0c;java.util.regex.Pattern类来帮助我们实现此功能。例一&#xff1a;以下程序将把"This is a farm that that raises dairy cattle."中的…

as和java什么关系_深入理解happens-before和as-if-serial语义

概述本文大部分整理自《Java并发编程的艺术》&#xff0c;温故而知新&#xff0c;加深对基础的理解程度。指令序列的重排序我们在编写代码的时候&#xff0c;通常自上而下编写&#xff0c;那么希望执行的顺序&#xff0c;理论上也是逐步串行执行&#xff0c;但是为了提高性能&a…

java产生字符函数_java生成字符串md5函数类(javaSE)

//实现生成MD5值import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.securi…

java atomiclong 使用_Java并发AtomicLongArray类

全屏java.util.concurrent.atomic.AtomicLongArray类提供了可以原子读取和写入的底层long类型数组的操作&#xff0c;并且还包含高级原子操作。 AtomicLongArray支持对基础long类型数组变量的原子操作。 它具有获取和设置方法&#xff0c;如在变量上的读取和写入。 也就是说&am…

memcached client for java api,Memcached Client Forjava API

java_memcached-release 关键类及方法整理说明如下。 SockIOPool 这个类用来创建管理客户端和服务器通讯连接池&#xff0c;客户端主要的工作包括数据通讯、服务器定位、hash 码生成等都是由这个类完成的。 1.public static SockIOPool getInstance() 获得连接池的单态方…

对于JAVA的总结800字,java试用期转正工作总结500字

【www.gz85.com - 试用期工作总结500字】java试用期转正工作总结一年的时间,每当自己在总结它的时候,感觉是那么的短暂—弹指一挥间.而也就是在这一挥间,承载着太多太多,有收获与成就,有失败与不足.回头看看2012年的足迹,伴随着自己一年的是学习与坚持.2016年伊始是通过分销资源…

rtrim php,php rtrim() 格式化中文问题

先看以下代码var_dump(rtrim("互联网产品、", "、"));我们以为会得到结果 "互联网产品", 但实际上获得的是 ""互联网产&#xfffd;&#xfffd;"为什么呢, 其实这是编码引起的问题.rtrim()这个函数在处理字符时是按照ascii编码来…

java gbk汉字 10进制,用java程序将GBK字符转成UTF-8编码格式

UTF-8 采用变长度字节来表示字符&#xff0c;理论上最多可以到 6 个字节长度(一个字符六个字节)。UTF-8 编码兼容了 ASC II(0-127)&#xff0c; 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符&#xff0c;才用以下编码规范&#xff1a…

我的世界java版刷雪球机,我的世界手机版怎么刷雪球 无限刷雪球机

随着全球变暖&#xff0c;厄尔尼诺现象加剧&#xff0c;一些生活在亚热带的孩子越来越感受不到下雪的喜悦&#xff0c;雪场的票子也是难求&#xff01;不过不要着急&#xff0c;Minecraft给你模拟了一个生存的环境&#xff0c;在这里&#xff0c;你可以和好友联机打雪仗&#x…

php请求api获取返回值,我用curl请求接口获取返回值,但是不成功,大神给看看怎么调取?...

接口地址 http://mp.vservice.com.cn/service/OutWebService?wsdl接口调用方callService(String serviceName,String servId,String secretKey,String xmlInfo)参数名称 传值serviceName&#xff1a;OAuthservId &#xff1a;服务号idsecretKey &#xff1a;服务号秘钥xmlInfo…

对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼这个对应的是单输入单输出的。多输入多输出的如下&#xff1a;% Thansfer multiple transfer functions into sate space modelsclcclear all;% Step1&#xff1a;输入传递函数分子分母系数%From u1 to y1num1[-0.0006086 -7.715e-…

matlab的fftn,matlab fftn

(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移到光谱中心 语法:......(X,m,n) fftn 进行 n 维快速傅立叶变换(反变换用 ifftn) 语法:Yffn(X) \\ Yfftn(X,siz) fftshift 快速傅立叶变换的 DC 组件移…

php catch e是什么,php try catch 中的catch(Exception $e) 中的Exception 有什么作用?

首先很明确的是 try ... catch ... 是一个语言结构。那既然如此就不能用函数参数类型限定的方式去理解 catch 后面的括号里的 Exception 了。如果这里没有 Exception&#xff0c;比如这样写&#xff1a;try {} catch ($e) {}你会得到一个错误&#xff1a;Parse error: parse er…

java udp 心跳,udp简略通讯示例-心跳示例

当前位置:我的异常网 软件架构设计 udp简略通讯示例-心跳示例udp简略通讯示例-心跳示例www.myexceptions.net 网友分享于&#xff1a;2013-09-04 浏览&#xff1a;44次udp简单通讯示例---心跳示例//发送心跳new UDPToPointCenter(18056).start();public class UDPToPointCen…

php如何随机显示图片,php中随机显示图片的函数代码_php

/*********************************************** Filename : img.php* Author : freemousehttp://www.gaodaima.com/?p49284php中随机显示图片的函数代码_php* web : www.cnphp.info* email :freemouse1981gmail.com* Date : 2010/12/27* Usage:* * **********************…

php数组里面写路径,使用路径在PHP数组中进行递归搜索

我会尝试清理一下,但这有效&#xff1a;$needle ["chapter one", foo, bar];$array [["name" > "Intro","id" > "123","children" > ["name" > "foo","id" > &qu…

matlab时域分析论文,基于Matlab语言的数字信号时域相关性研究与分析.doc

摘要&#xff1a;针对在工程测试信号处理过程中广泛存在的信号之间的相关性问题&#xff0c;本文将研究和分析信号之间不同形式的相关关系以及信号在时域中的相关性。从而揭示了信号间关联程度的内在规律。通过举出实例来展示信号相关分析技术在实际工程中的具体应用。最后通过…

php 图片 byte数组,php – 将图像存储在PostgreSQL数据库的bytea字段中

TL; DR&#xff1a;删除addslashes($data).这里多余.双重逃避..两次$datafread($p,filesize($fi));$dataaddslashes($data);$dat pg_escape_bytea($data);您读取数据,将其转义为字符串文字,然后将其转换为bytea八进制或十六进制转义.即使pg_escape_bytea是理智的,它也不会那样,…