题解 | #数组中重复的数字#

数组中重复的数字

http://www.nowcoder.com/practice/6fe361ede7e54db1b84adc81d09d8524

1.思路是,既然题目规定所有数字都在0到n-1的范围内,那其实可以用类似位图的思路来解决。
拿到number[i]之后,去检查对应位图下标的位置是否为0,为0则设置为1,否则直接返回。
例如number[2] == 15,那就检查dp[15] == 1 ? return 15 : dp[15] = 1
    public int duplicate (int[] numbers) {
        // write code here
        int dp[] = new int[numbers.length];
        for (int i = 0; i < numbers.length; i++) {
            if (dp[numbers[i]] == 0) {
                dp[numbers[i]] = 1;
            } else {
                return numbers[i];
            }
        }
        return -1;
    }

2.第二种办法就是利用set的特性,拿到数字之后执行add,成功add则忽略,add失败则直接返回
    public int duplicate (int[] numbers) {
        // write code here
        HashSet set = new HashSet(numbers.length);
        for(int i = 0; i < numbers.length; i++){
            if(!set.add(numbers[i])){
                return numbers[i];
            }
        }
        return -1;
    }

全部评论

相关推荐

老方子:英语等级cet写错了吧
点赞 评论 收藏
分享
02-10 21:39
Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务