一道简单题,但是这道题的最佳做法却让我很惊讶,特别的精妙
首先我想到的就是对数组排序,然后找相邻坐标相等的情况,不过很慢,因为排序是nlogn
然后是map来用,时间复杂度是n
上面两种是我自己能想到的,而官方的却达到了n的时间复杂度和1的空间复杂度,确实很强
思路是这样的,因为是n个从0到n-1的数,那么如果没有重复的情况下,其实每个下标的就和该下标对应的数组值是相等的。假如不相等,那么我们将该下标对应的值和它本来应该呆的地方交换,一直这样直到我们发现数组下标的第一个值就是对应的数组中的值。如果是的话,则该下标可以向后移动了,再进行类似的操作,直到到达某个下标时,又出现了下标和对应下标的数组值不相等的情况,但是这种情况下假如把该下标对应数组的值作为下标查询出来的数组的值与下标相等,那么就说明是重复的,即找到了我们想要的答案。代码如下: