首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

剑指offer - 数组中重复的数字 - JavaScript

题目描述:找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。 题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0 ~ n-1 的范围内。...整体的流程是:遍历数组中的数字,检查是否出现过,如果出现过,那么返回此数字。...解法 2: 原地哈希(推荐) 从题目描述可以知道,所有数字都在 0 ~ n-1 的范围内。...以[1, 3, 2, 3]为例,第一次交换后,变为[3, 1, 2, 3],如果没有内循环,那么就会跳过第一个 3,继续遍历,而后面的元素又恰巧都在正确位置上,最终没有检查出重复元素。

1K30

《剑指 offer》刷题记录之:数组

面试题 3:数组中重复的数字 ❝题目:在一个长度为 n 的数组里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。...从头到尾按顺序扫描数组的每个数字,每扫描到一个数字的时候,都可以用 O(1) 的时间来判断哈希表里是否已经包含了该数字。如果哈希表里还没有这个数字,就把它加入哈希表。...注意到本题中数组的数字都在 0~n-1 的范围内,如果数组中没有重复的数字,那么当数组排序之后数字 i 将出现在下标为 i 的位置。...] nums[i] = temp return -1 # 不写的话返回 None 如果我们修改题目如下: ❝在一个长度为 n+1 的数组里所有的数字都在...1~n 的范围内,所以数组内至少有一个数字是重复的。

87320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    剑指Offer-数组中重复的数字

    package Array; /** * 数组中重复的数字 *在一个长度为n的数组里的所有数字都在0到n-1的范围内。 * 数组中某些数字是重复的,但不知道有几个数字是重复的。...也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 * 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。...* 思路: * 数组中的数字都在0到n-1的数字范围内。如果数组中没有重复出现的数字,那么当数组排序后数字i就出现在数组中下标为i的元素处。...那么数组中如果存在重复数字的话,有些位置的对应的数字就没有出现,而有些位置可能存在多个数字。数组用numbers表示 那么我们重排这个数组。从第0个元素开始。...3、循环退出的条件是直至数组最后一个元素,仍没有找到重复的数字,数组中不存在重复的数字。

    90440

    每日一题:数组中重复的数字(C语言C++)

    题目描述 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。 示例 : 输入: [2, 3, 1, 0, 2, 5, 3] 输出:2 或 3 思路分析 首先想到的是暴力法—两个for循环实现,缺点很明显:用时过多。...再进一步可以先排序数组然后一次for循环,容易找出所有的重复元素以及重复的次数,用时依旧较长。...我们考虑如果每个数字都置出现一次,那么此时是最完美的,每一个下标i对应元素numbers[i],也就是说我们对于数组中的每个元素numbers[i]都把它放在自己应该在的位置上numbers[numbers...= i) { //交换前检查是否相等 if (nums[i] == nums[nums[i]]) return nums[i]; int temp = nums[i];

    3.3K20

    数组中重复的数字

    题目描述 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。 数组中某些数字是重复的,但不知道有几个数字重复了, 也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。...但是,本题有特别之处: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内 也就意味着,假设我们把n个数放到编号0到n-1的抽屉中,有重复的情况下,某个抽屉中的至少有2个数。...方法3、借助一个辅助数组 定义一个额外的数组 int[] counts = new int[len], 用于记录数字的出现次数。...此方法借助了一个额外长度为n的数组作为辅助工具,所以空间复杂度为O(N)。那有没有可能不用额外数组,在原数组的基础上做交换,达到相关的效果,空间复杂度为O(1)。我们来看下方法4。

    21120

    【剑指offer|1.数组中重复的数字】

    文章目录 0.数组中重复的数字 1.堆排序 2.修改数组的方法 3.不修改数组的方法 0.数组中重复的数字 关键字: 长度为n的数组nums中所有数字都在0~n-1范围内 返回任意一个重复的数字...[i]; } return -1; } }; 2.修改数组的方法 修改数组的方法: 因为有n个元素,每一个元素都在0~(n-1)范围内,如果元素不重复的话,...对数组重排之后,下标和元素值之间应该是一一对应的关系 但是因为重复的原因,重排之后,必然会导致一些下标对应的位置没有元素,一些下标对应的位置元素有多个 只要找到重排之后下标对应的位置元素有多个的元素并返回即可...现在我们重排这个数组: 当扫描下标为i的数字m的时候,首先比较这个下标i是否等于数字m,如果等于就啥也不做,然后继续扫描下一个元素 如果不等于就找到下标为m的位置:假设这个元素值为数字n: 2.1...如果相等,则说明这个位置重复了 2.2如果不相等,则说明这个位置暂时还没有重复,把下标为i和下标为m的值进行交换; 接下来重复以上步骤,直到找到第一个重复的元素即可 C语言版:这里我原本犯了一个错

    18320

    【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美

    1.2 丢失的数字(easy) 题目链接:268. 丢失的数字 题目描述: 给定⼀个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。...示例 1: 输入:nums = [3,0,1] 输出:2 解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。2 是丢失的数字,因为它没有出现在 nums 中。...示例 2: 输入:nums = [0,1] 输出:2 解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。2 是丢失的数字,因为它没有出现在 nums 中。...8 是丢失的数字,因为它没有出现在 nums 中。 示例 4: 输入:nums = [0] 输出:1 解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。...边界条件处理: 确保遍历过程中正确处理所有范围内的数字。 时间复杂度和空间复杂度 时间复杂度:O(n),其中 n 是数组的长度,需要遍历数组两次。

    9210

    剑指offer__3__数组中重复的数字

    题目:找出数组中重复的数字 描述:在一个长度为n的数组里所有的数字都在0~n-1的范围内,数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次。...请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应输出的重复数字是2或者3。...解决办法: 1 将数组排序,然后从头到尾进行扫描,维护一个变量指向当前下标的下一个元素,然后比对当前元素与下一个元素是否相等,若相等则直接返回即可,这种做法排序时间复杂的较高。...2 我们注意到数组的长度为n,而元素的范围在0~0-1之间,当数组中没有重复数据的理想状态下,把数组从小到大排好序,这时数组下标的值会与数组内元素的值是一样的如大小为4的数组中没有重复数据的状态下,从小到大排好序后为...,直到我们发现一个重复的数字。

    27310

    LeetCode-面试题03-数组中重复的数字

    # LeetCode-面试题03-数组中重复的数字 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...,在表内的数字添加的时候会告诉已经存在,这个已经存在的数字就是要返回的数字了 方法2、这个思想很巧妙,也是剑指offer上的最优解,数组的数字都在0~n-1的范围内。...如果这个数组中没有重复的数字,那么当数组排序之后数字i将会出现在下标为i的位置。从头到尾依次扫描这个数组中的数字,当扫描到下标为i的数字时,首先比较这个数字(用m表示)是不是等于i。...接下来再重复这个比较、交换的过程,直到发现一个重复的数字。

    21210

    【算法题解】 Day20 查找

    数组中重复的数字 题目 剑指 Offer 03. 数组中重复的数字 难度:easy 找出数组中重复的数字。 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...,因此遍历数组,遇到重复的数字即返回。...为了判断一个数字是否重复遇到,使用集合存储已经遇到的数字,如果遇到的一个数字已经在集合中,则当前的数字是重复数字。...初始化集合为空集合,重复的数字 repeat = -1 遍历数组中的每个元素: 将该元素加入集合中,判断是否添加成功 如果添加失败,说明该元素已经在集合中,因此该元素是重复元素,将该元素的值赋给 repeat

    26910

    LeetCode题解—重复数字

    今天和大家看看剑指 Offer上的一题:数组中重复的数字。 题目:数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在0~n-1的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...所以我们可以利用那些没有重复、成员唯一的集合,比如HashSet。 HashSet的特点就是唯一和无序,所以只要我们把数组中的数字加到HashSet中,如果出现重复数字,就会加入失败。...空间复杂度 如果set集合add一次就会占用一次空间,所以n次循环,最坏情况空间复杂度就为O(n) 解法二 这道题其实还有个题干不容易被发现,就是第一句: 长度为 n 的数组 nums 里的所有数字都在...0~n-1 的范围内 这句话的意思就是,如果没有重复数字的情况下,这个数组在排序后应该是数组中下标为i的位置所在的值应该是等于i的。

    46330

    剑指 Offer 总结

    题目一:找出数组中重复的数字 在一个长度为 n 的数组里的所有数字都在 0 ~ n - 1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...在一个长度为 n+1 的数组里的所有数字都在 1~n 的范围内,所以数组中至少有一个数字是重复的。...请找出数组中任意一个重复的数字,但不能修改输入的数组。 例如,如果输入长度为 8 的数组 [2, 3, 5, 4, 3, 2, 6, 7] 那么对应的输出是重复的数字 2 或者 3。...请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 例如下面的二维数组就是每行、每列都递增排序。

    22220

    数组中重复的数字

    题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。...例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路 最简单的就是用一个数组或者哈希表来存储已经遍历过的数字,但是这样需要开辟额外的空间。...如果题目要求不能开辟额外的空间,那我们可以用如下的方法: 因为数组中的数字都在0~n-1的范围内,所以,如果数组中没有重复的数,那当数组排序后,数字i将出现在下标为i的位置。...现在我们重排这个数组,从头到尾扫描每个数字,当扫描到下标为i的数字时,首先比较这个数字(记为m)是不是等于i。...如果是,则接着扫描下一个数字;如果不是,则再拿它和m 位置上的数字进行比较,如果它们相等,就找到了一个重复的数字(该数字在下标为i和m的位置都出现了),返回true;如果它和m位置上的数字不相等,就把第

    2.1K30

    剑指Offer(五十)-- 数组中重复的数字

    n的数组里的所有数字都在0到n-1的范围内。...数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中第一个重复的数字。...例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是第一个重复的数字2。没有重复的数字返回-1。...当然除了set,我们也可以直接借助数组,因为所有数字都在0到n-1的范围内,我们用一个大小为n的数组,就可以对所有的数字进行统计个数,如果个数超过1,那么肯定是重复的数字,如果没有重复的数字,则返回-1...那么有没有空间复杂度为O(1)的做法呢?肯定是有的,不借助额外的空间,那么就只能操作原数组了。如果没有重复的情况,那么这些数字排序后,数字i和数组下标i应该是一一对应的。不会出现多个数字i的情况。

    30810

    剑指offer(一):找出数组中重复的数字

    ❝涓滴之水终可以磨损大石,不是由于它力量强大,而是由于昼夜不舍的滴坠。——贝多芬❞ 找出数组中重复的数字 题目描述 在一个长度为 n 的数组里的所有数字都在 0 到 n-1 的范围内。...数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。...例如,如果输入长度为 7 的数组 {2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字 2 或者 3。 解法 解法一 排序后,顺序扫描,判断是否有重复,时间复杂度为 O(n²)。...解法二 利用哈希表,遍历数组,如果哈希表中没有该元素,则存入哈希表中,否则返回重复的元素。时间复杂度为 O(n),空间复杂度为 O(n)。...解法三 长度为 n,元素的数值范围也为 n,如果没有重复元素,那么数组每个下标对应的值与下标相等。

    65210

    每日算法题:Day 25(概率统计)

    Day 25, 概率统计知识点走起~ 1 编程题 【剑指Offer】数组中重复的数 在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。...也不知道每个数字重复几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。...思路: 由于题目中说了数组的长度为n,且每个数都在0到n-1的范围内,那么如果这个数组是排好序的,则每个数字与其索引数应该是相等的。...如果不相等,那么会进入一个循环,在循环中,会判断number[i]和number[number[i]]两个数是否相等,如果相等,则找到一对重复的,退出!...我们可以看上面的图片,我们可以使用一个和A数组一样大小的b数组,首先计算下三角的乘积,只需要O(n)的时间可以遍历得到一个b[n]的数组,包含下三角的乘积,对角线元素值为1。

    1.1K10

    剑指offer(二):不修改数组找出重复的数字

    —— 佚名❞ 不修改数组找出重复的数字 题目描述 在一个长度为 n+1 的数组里的所有数字都在 1 到 n 的范围内,所以数组中至少有一个数字是重复的。...请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为 8 的数组 {2, 3, 5, 4, 3, 2, 6, 7},那么对应的输出是重复的数字 2 或者 3。...计算数组中有多少个(count)元素落在 [1, middle] 区间内,如果 count 大于 middle-1+1,那么说明这个范围内有重复元素,否则在另一个范围内。...public class Solution { /** * 不修改数组查找重复的元素,没有则返回-1 * @param numbers 数组 * @return 重复的元素...; 数组中不包含重复的数字; 无效测试输入用例(输入空指针)。

    80730
    领券