题目描述:在一个长度为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并且返回该数。
代码截图:
网友评论