package com.banban.CeShi;
import java.util.*;
/**
* @author :zhangpengzhan
* @date :Created in 2019/3/29 16:52
* @name :FindReNumber
*
* 找出数组中任意一个重复的数字:
* 在长度为n数组里,元素范围均在0~n-1里,有些元素是重复的,但是不知道有几个重复了,找出
* 任意一个重复的数字,例如输入:{2,3,1,0,2,5,3} 输出2或者3
*
* 方法一:排序加扫描
* 方法二:哈希表
* 方法三:从头到位依次扫描数组,当扫面到下标为i的数字,
* 先比较这个数字m等不等于i下标
* 等于:i++
* 不等于:将数字m和数组下标为m的数字n比较
* 等于:找到与第一个重复数字
* 不等于:交换m和n,将m放到对应的下标去
* 重复上述过程
* 时间复杂o(n) 空间复杂o(1)
* 方法四:不修改原数组,二分思想
* 假定数组元素有八个,统计元素值为0~3的有几个,统计元素值为4~8的有几个,
* 如果两个区间有一个区间的元素数量大于一半,说明该区间元素有重复,继续拆分该区间
* 《改天实现吧》
*/
public class FindReNumber {
/**
* 方法一:
* 快排+扫描
* @param num
* @return
*/
public static int findNumber1(int[] num){
//算前检验
if (num == null){
return -1;
}
for (int i : num) {
if (i<0||i>=num.length)
return -1;
}
int[] sort = QuickSort(num, 0, num.length - 1);
for (int i = 0; i < sort.length;i++) {
int j = i+1;
if (j == sort.length){
return -1
求数组中重复的数字
最新推荐文章于 2021-04-15 21:14:27 发布
本文主要探讨如何在给定的数组中寻找重复出现的数字,这是《剑指Offer》中的一道经典问题。通过算法解析和代码实现,详细阐述了解决这类问题的思路和方法。
摘要由CSDN通过智能技术生成