美文网首页
找出整数数组中任意重复的数字

找出整数数组中任意重复的数字

作者: 翁正存 | 来源:发表于2019-01-14 10:57 被阅读12次

整数数组arr大小为n,取值范围0~n-1,可能包含多个重复的数字,如果数组存在重复的数字,请找出数组arr中任意重复的数字。

思路1:使用哈希表,遍历arr,依次将arr[i]存入哈希表,如果哈希表中已经存在arr[i],则表明arr[i]重复了。用这个方法,可以找出所有重复的数字,但是需要额外O(n)的空间,是以空间换时间。

思路2:直接修改arr数组,遍历arr,如果arr[i] != i,那么就进入一个循环,

如果arr[i] == arr[arr[i]],则说明arr[i]出现了2次,是重复数字,可以返回了;

否则,就交换这两个数字,交换以后数字i就满足了arr[i] == i。

使用这个方法可以判断数组是否有重复数字,并且可以打印出一个重复数字,但是无法打印出所有的重复数字。

public class FindAnyDuplicateNumber {

    public int getDuplicate(int[] numbers) {

        if(numbers == null || numbers.length < 0){

            return -1;

        }

//边界条件,程序必须运行在正确的context下

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

if(numbers[i] <0 || numbers[i] > numbers.length){

return -1;

}

}

        for(int i = 0; i < numbers.length - 1; i++){

            while (numbers[i] != i){

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

                    return numbers[i];

                }

                //swap numbers[i] numbers[numberp[i]]

                int temp = numbers[i];

                numbers[i] = numbers[temp];

                numbers[temp] = temp;

            }

        }

        return -1;

    }

    public static void main(String[] args){

        //只能找到一个重复的数字,如果要找到所有重复的数字,就要使用辅助数组

        int[] nums = {1, 4, 2, 5, 2, 0, 6, 3};

        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums));

        int[] nums2 = null;

        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums2));

        int[] nums3 = {1, 4, 2, 5, 7, 0, 6, 3};

        System.out.println(new FindAnyDuplicateNumber().getDuplicate(nums3));

    }

}

---------------------

作者:翁正存

来源:CSDN

原文:https://blog.csdn.net/Wengzhengcun/article/details/86359275

版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章

  • 找出整数数组中任意重复的数字

    整数数组arr大小为n,取值范围0~n-1,可能包含多个重复的数字,如果数组存在重复的数字,请找出数组arr中任意...

  • 3.数组中重复的数字

    找出数组中任意一个重复的数字! 思路1:把数组排序,从排序后的数组中找出重复的数字。但排序一个长度为n的数组需要O...

  • 2019-08-04-数组算法

    找出数组中重复的数字 1,题目:长度为n+1的数组中保存这1-n的数字,找出其中任意一个重复的数字,并输出 空间换...

  • 《剑指Offer》之数据结构篇

    1. 长度为n数组,数字在 0~n-1 范围内,找出数组中任意一个重复的数 O(n) 2. 不修改数组找出重复数字...

  • 剑指offer刷题week 01

    原题:找出数组中重复的数字 给定一个长度为 n 的整数数组 nums,数组中所有的数字都在 0∼n−1 的范围内。...

  • 【直通BAT】剑指Offer-经典试题整理(1)

    3.1 找出数组中重复的数来源:AcWing 题目描述给定一个长度为 n 的整数数组 nums,数组中所有的数字都...

  • 面试题3:数组中重复的数字

    题目一:找出数组中任意一个重复的数字 解法1 直接将数组排序,从头开始扫描数组是否重复,排序一个数组的时间复杂度为...

  • java如何找出数组中的不重复数字

    java如何找出数组中的不重复数字 找出数组中不重复的一个数字,题目大致是这样的: 1int[] a = { 1,...

  • 剑指offer题集

    [3] 数组中重复的数字 题目一:找出数组中重复的数字 Description 在一个长度为n的数组里的所有数字都...

  • LeetCode 每日一题 [38] 数组中重复的数字

    LeetCode 数组中重复的数字 [简单] 找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数...

网友评论

      本文标题:找出整数数组中任意重复的数字

      本文链接:https://www.haomeiwen.com/subject/hsrddqtx.html