JZ50-数组中重复的数字

数组中重复的数字

https://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524?tpId=13&tags=&title=&diffculty=0&judgeStatus=0&rp=1&tab=answerKey

//因为数组中数字范围为0 - n-1,如果完全没有重复,则下标为i的数字array[i]=i;如果不满足就说明有重复
    public static int getRepeatNumber3(int[] array) {

        if (array == null || array.length == 0) {
            return -1;
        }
        int len = array.length;

        for (int i = 0; i < len; i++) {
            if (array[i] >= len) { //超过范围
                return -1;
            }
            if (array[i] == i) { //每个数字与下标都在正确的位置上,继续循环。不能i++
                continue;
            } else {  //如果不对应,就将其放在正确没有重复数字的情况下的位置。。。我们将其排在正确位置上(相当于排序)
                if (array[array[i]] == array[i]) {  //如果有重复,既两个数字放到同一位置
                    return array[i];
                } else {  //无重复,两个数字要换位置,否则会被覆盖
                    int temp = array[array[i]];
                    array[array[i]] = array[i];
                    array[i] = temp;
                }
            }
        }
        return -1;
    }

    //获取全部的重复数字
    public static List<Integer> getRepeatNumber4(int[] array) {

        List<Integer> repeat = new ArrayList<>();

        if (array == null || array.length == 0) {
            return null;
        }
        int len = array.length;

        for (int i = 0; i < len; i++) {
            if (array[i] >= len) { //超过范围
                return null;
            }
            if (array[i] == i) { //每个数字与下标都在正确的位置上,继续循环。不能i++
                continue;
            } else {  //如果不对应,就将其放在正确没有重复数字的情况下的位置。。。我们将其排在正确位置上(相当于排序)
                if (array[array[i]] == array[i]) {  //如果有重复,既两个数字放到同一位置
                    repeat.add(array[i]);
                } else {  //无重复,两个数字要换位置,否则会被覆盖
                    int temp = array[array[i]];
                    array[array[i]] = array[i];
                    array[i] = temp;
                }
            }
        }
        return repeat;
    }

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务