下文通过几种方法给大家介绍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代码实现数字在数组中出现次数超过一半的相关内容,希望对大家有所帮助!

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

  1. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  2. java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  3. JAVA 油站管理系统_基于JAVA的全国加油站[实时油价]接口调用代码实例

    代码描述:基于JAVA的全国加油站[实时油价]接口调用代码实例 接口地址:https://www.juhe.cn/docs/api/id/7 1.[代码][Java]代码 import java.io ...

  4. java实现基金浮动_基于JAVA的重仓股基金接口调用代码实例

    代码描述:基于JAVA的重仓股基金接口调用代码实例 关联数据:重仓股基金 接口地址:http://www.juhe.cn/docs/api/id/27 1.[代码][Java]代码 import ja ...

  5. java+生成手机验证码_基于Java随机生成手机短信验证码的实例代码

    简单版 /** * 产生4位随机数(0000-9999) * * @return 4位随机数 */ public static String getFourRandom() { return Stri ...

  6. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  7. java android长连接_基于Java Socket的自定义协议,实现Android与服务器的长连接(一)...

    一.基础知识准备 在正式给大家介绍自定义协议之前,我们先对网络传输和协议解析的相关知识点做一个基本的介绍,尽管这些知识点我们在学校里学过,但难免会有所遗忘,这里先做一个简单的介绍,以便对后文的内容理解 ...

  8. java农产品查询系统_基于java的农产品销售系统的设计与实现论文.docx

    基于java的农产品销售系统的设计与实现论文.docx 分类号_______________ 密级________________ UDC _______________ 学号_毕业设计(论文)论文题 ...

  9. java 计算移动平均线_基于Java语言开发的个性化股票分析技术:移动平均线(MA)...

    基于Java语言开发的个性化股票分析技术:移动平均线(MA) 基于 Java 语言开发的个性化股票分析技术:移动平均线(MA)移动平均线(MA)是以道·琼斯的"平均成本概念"为理论 ...

最新文章

  1. Scala 中下划线的用法
  2. mysql 组复制和传统复制_MySQL的GTID复制与传统复制的相互切换
  3. linux下的僵尸进程处理SIGCHLD信号【转】
  4. 关于LocalBroadcastManager的介绍和优势
  5. WebRTCon 2018 Day One精彩回顾
  6. mongdb 群集_通过对比群集分配进行视觉特征的无监督学习
  7. maven default aliyun_大家看看大佬对Maven仓库的讲解,有何高明之处?
  8. 编译器前端概述与可信编译器
  9. 【十五分钟Talkshow】如何善用你的.NET开发环境
  10. Cannot get a connection, pool exhausted, cause: ValidateObject failed
  11. 山西高考2021年成绩查询时间,2021年山西高考成绩公布时间
  12. web 开发之js---js 实现文本高亮
  13. 高负载高并发网站架构分析
  14. C++、C++-OpenCV、Python、Python-Numpy、MATLAB的除法取余(余数)方法总结
  15. PCWorld选出52个实用网站
  16. HTML 内容保存到word文档(angular4调用第三方js插件实现)
  17. WaitForSingleObject、WaitForMultipleObjects假死,永远等待的问题
  18. 网页在线PS网站源码PHP 浏览器在线P图
  19. MathorCup 高校数学建模挑战赛第一届——大数据竞赛论文格式及提交规范
  20. android系统 vender添加自定义的预编译的应用程序

热门文章

  1. js中遇到的一个错误Uncaught SyntaxError: missing )after argument list
  2. Java 中array.size()_Java ArrayDeque size()方法与示例
  3. 使用 ref 对已渲染到页面的节点进行标记
  4. 简述HTML语言概念,HTML语言的基本概念和基本格式.doc
  5. 嵌入式linux组件,嵌入式Linux系统的几大组件!
  6. 怎么查看电脑有没有python_python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学...
  7. Java反射————Method根据方法名称字符串调用方法
  8. 排序算法之----快速排序(快速上手快速排序)
  9. python归并排序算法实现_python算法实现系列-归并排序
  10. stm32基本定时器