美文网首页
【剑指Offer刷题小记】数组中重复的数字(JAVA版)

【剑指Offer刷题小记】数组中重复的数字(JAVA版)

作者: park_one | 来源:发表于2020-04-11 13:34 被阅读0次

    题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

    问题分析

    (1)由于数组里的数字都在0到n-1范围内,所以可以设置一个大小为n的布尔型数组help[],把原数组的值设置为help数组的下标,遍历原数组,判断每次遍历的数对应的help数组的值是否为true,若是true则将当前的数赋值给duplication[0],否则将对应的help数组的值设为true。

    (2)看到另一种不需要额外空间消耗的方法,不过需要改变原数组的值。当一个数被访问过后,可以设置对应位置上的数减去长度n,再次访问到相同的数后会发现对应位上的数小于0,就可以再加回n并且返回该数。

    代码截图

    相关文章

      网友评论

          本文标题:【剑指Offer刷题小记】数组中重复的数字(JAVA版)

          本文链接:https://www.haomeiwen.com/subject/fmcymhtx.html