求数组中重复的数字

本文主要探讨如何在给定的数组中寻找重复出现的数字,这是《剑指Offer》中的一道经典问题。通过算法解析和代码实现,详细阐述了解决这类问题的思路和方法。
摘要由CSDN通过智能技术生成
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值