剑指 Offer 03. 数组中重复的数字

剑指 Offer 03. 数组中重复的数字

结果

执行结果:通过显示详情
执行用时:1 ms ,在所有Java提交中击败了79.80%的用户
内存消耗:48.9 MB ,在所有Java提交中击败了66.66%的用户
通j过测试用例:27/27

花费

10分钟左右,没有编码难度。

思路

最开始想的是存数字,每次读一个数字再和存的数字做匹配,很垃圾。

  • 思路1

    使用一个同样size的数组,按索引存储,存了表示1,没存表示0,输出第一个访问了存1的下标

  • 思路2

    使用set动态保存

思路一1效果更好

code1

public int findRepeatNumber(int[] nums) {
        /**
         * 思路1,使用一个同样size的数组,按索引存储,存了表示1,没存表示0,输出第一个访问了存1的下标
         */
        int[] re = new int[nums.length];
//        for (int i : re){
//            System.out.print(i+"\t");
//        }

        for (int num : nums) {
            if (re[num] == 1) {
                return num;
            } else {
                re[num] = 1;
            }
        }
        return -1;
    }

code2

public int findRepeatNumber1(int[] nums) {
    /**
     * 思路2,使用set动态保存
     */
    HashSet<Integer> hs = new HashSet<>();
    for (int num : nums) {
        boolean re = hs.add(num);
        if (!re) {
            return num;
        }
    }
    return -1;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值