[剑指offer] JAVA版题解 面试题3

题目
在这里插入图片描述
解题思路:
在这里插入图片描述
在这里插入图片描述
实现:时间复杂度O(n),空间复杂度:O(1)

public Integer findDuplicateInArray(int[] array){
        // 对参数进行判断
        if (array == null || array.length == 0){
            return null;
        }

        for(int i = 0;i < array.length;i ++){
            if (array[i] < 0 || array[i] > array.length - 1){
                return null;
            }
        }

        for(int i = 0;i < array.length;i ++){
            while (array[i] != i){
                int num = array[i];
                if(array[num] == num){
                    return num;
                }
                array[i] = array[num];
                array[num] = num;
            }
        }
        return null;
    }

变形题目:
在这里插入图片描述
解法一:(辅助数组法)
在这里插入图片描述
代码实现:

  public Integer findDuplicateInArray(int[] array){
        // 数组为空或者数组没有元素
        if (array == null || array.length == 0){
            return null;
        }

        // 数组长度
        int arrLen = array.length;

        // 数组有元素但是元素的值不符合要求,数组的值要求在(1~n)
        for (int i = 0;i < arrLen;i ++){
            if (array[i] <= 0 || array[i] >= arrLen){
                return null;
            }
        }

        // 用辅助数组
        int[] helpArr = new int[arrLen];

        // 遍历原数组的每一个元素,将该元素的值作为辅助数组的下标,查看以该下标的辅助数组的值是否为0,不为0说明重复,否则将值写入辅助数组。
        for (int i = 0;i < arrLen;i ++){
            int arrValue = array[i];
            if (helpArr[arrValue] != 0){
                return arrValue;
            }
            helpArr[arrValue] = arrValue;
        }

        return null;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章