数组中的重复数字

剑指offer面试题3,找出数组中的重复数字(java实现)

给定一个长度为 n 的整数数组 num,数组中所有的数字都在 0∼n的范围内。

数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。

请找出数组中任意一个重复的数字。

解法:对于长度为n的数组,数字都在0~n之间。根据鸽笼原理,一定存在重复的数字。如果没有重复度的数字,将数组排序之后所有的数字都和它的下标是一致的。所以这里,我们可以将所有的数字放回到与它一致的下标中,如果在下标处已经存在改数字,那么久找到了重复的数字。

public class RepeatNumber {

    public static void main(String[] args){

        RepeatNumber rn =new RepeatNumber();

            int[] num =new int[]{2,3,1,0,2,5,3};

            System.out.println(rn.repeatNumber(num));

    }

    public int repeatNumber(int[] num){

        if(num.length==0)    return -1;

            for(int i=0;i<num.length;){

                   if(num[i] != i){

                        if(num[num[i]] == num[i]){

                            return num[i];

                        }else{

                            int tem = num[i];

                            num[i] = num[num[i]];

                            num[tem] = tem;

                        }

                    }

                      i++;

                }

            return -1;

        }

   }

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,061评论 0 2
  • 什么是数组? 数组简单来说就是将所有的数据排成一排存放在系统分配的一个内存块上,通过使用特定元素的索引作为数组的下...
    启明_b56f阅读 987评论 0 0
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,941评论 0 2
  • 星一盘,月一盘,剔透玲珑水里船,相思念最难 水一环,风一环,渡口思君些许年,泪残难入眠
    天蓬元帅_f271阅读 199评论 0 4
  • 十一月在不知不觉中悄然过去,除了那一次全民狂欢的双十一盛典外,几乎没有留下其它任何值得怀念的记忆。也正是由于那次过...
    夏野阅读 254评论 0 0