-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
面试题3:数组中重复的数字 题目一 #63
Comments
是的,我也想问这个问题,怎么可能是只要交换两次就能找到呢,时间复杂度分析得有点问题. |
书本中这句话的确描述有问题。 |
大佬,我用100000个数据测试了下,“0~(n-1)这个n个数字在没有重复数字的情况下最多需要交换n-1次就可以让所有数字找到自己的位置”这句话,最多应该是交换n次。 |
辛苦你专门跑了程序来验证我的结果。至于为什么实际程序跑出来是最多交换n次,我暂时还没有想到原因。 |
长度为n,值为0到n-1且不重复的数组最多需要n次交换 |
n-1次交换后可以确保n-1个位置上的元素位置正确,那么剩下的一个元素位置也能确定是正确的。 |
最后一种解法,第二版书中指出 “代码中尽管有一个两重循环,但每个数字最多只要交换两次就能找到属于它自己的位置,因此总的时间复杂度是O(n)。”
这句话中提到的每个数字最多只要交换两次是否欠妥?比如原数组是[1,2,3,4,5,0]的情况,第一个元素要同后面元素依次交换,也就是5次才能把0放到正确的位置。可是总的又只需要5次交换就够了,但是最差的情况是不是需要交换n + (n-1) + (n-2) + ...+ 1次,所以时间复杂度就是O(n^2)。
The text was updated successfully, but these errors were encountered: