zoukankan      html  css  js  c++  java
  • 《剑指offer》—— 数组中重复的数字

    原题链接:https://leetcode-cn.com/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/
    原文链接:https://juejin.im/post/6844904153970393096

    题目描述

    在一个长度为 (n) 的数组 nums 里的所有数字都在 ([0, n-1]) 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

    限制: (2 <= n <= 100000)

    示例:

    输入:[2, 3, 1, 0, 2, 5, 3]
    输出:23

    题目剖析

    对于这样的题目我们可以使用 哈希表 来解决,具体的步骤如下:

    • 遍历数组 nums, 生成 哈希表,其中数字作为 keykey 对应该数字出现的次数
    • 遍历该 哈希表,如果碰到出现次数大于 1 的情况,直接返回该数字

    代码如下:

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var findRepeatNumber = function(nums) {
        const map = new Map()
        for (const num of nums) {
            const val = map.get(num)
            if (map.has(num)) {
                map.set(num, val + 1)
            } else {
                map.set(num, 1)
            }
        }
        for (const [key, val] of map) {
            if (val > 1) {
                return key
            }
        }
    };
    

    优化

    对于上面的代码,其实我们只要一次循环就够了,这里就直接放代码了,应该很容易能看懂:

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var findRepeatNumber = function(nums) {
        const map = new Map()
        for (const num of nums) {
            const val = map.get(num)
            if (map.has(num)) {
                return num
            }
            map.set(num, 1)
        }
    };
    

    搜索「tony老师的前端补习班」关注我的微信公众号,那么就可以第一时间收到我的最新文章。

  • 相关阅读:
    6.7
    6.5
    6.4随笔
    js 插件
    js插件
    web中集成jdbc
    jsp
    web容器中的servlet
    web服务器的监听器,过滤器
    几款js工具的使用
  • 原文地址:https://www.cnblogs.com/pigpigever/p/13693939.html
Copyright © 2011-2022 走看看