Redian新闻
>
一个找duplicate element in an array的问题
avatar
一个找duplicate element in an array的问题# JobHunting - 待字闺中
d*y
1
一个array size n, element from 1 ~ n-1, 不确定有多少个duplicate,怎样用O(n)
的时间和 O(1)的空间来找出duplicate的元素。可以修改array
有人用这种code,这个是O(n)的复杂度吗?怎么分析呢?
for 1 <= i <= n:
while A[i] ≠ i:
if A[A[i]] = A[i]: return A[i]
swap(A[A[i]], A[i])
avatar
d*y
2
1到n-1之间每个数至多被swap一次

n)

【在 d*******y 的大作中提到】
: 一个array size n, element from 1 ~ n-1, 不确定有多少个duplicate,怎样用O(n)
: 的时间和 O(1)的空间来找出duplicate的元素。可以修改array
: 有人用这种code,这个是O(n)的复杂度吗?怎么分析呢?
: for 1 <= i <= n:
: while A[i] ≠ i:
: if A[A[i]] = A[i]: return A[i]
: swap(A[A[i]], A[i])

avatar
d*y
3
原来这么简单,多谢了
avatar
p*2
4

n)
找一个就可以了呀?刚开始还以为要找所有的呢。

【在 d*******y 的大作中提到】
: 一个array size n, element from 1 ~ n-1, 不确定有多少个duplicate,怎样用O(n)
: 的时间和 O(1)的空间来找出duplicate的元素。可以修改array
: 有人用这种code,这个是O(n)的复杂度吗?怎么分析呢?
: for 1 <= i <= n:
: while A[i] ≠ i:
: if A[A[i]] = A[i]: return A[i]
: swap(A[A[i]], A[i])

avatar
B*t
5
这不和找第一个missing positive差不多么。
case: 2 2 2 2 2. 这个程序能返回5么。。。
感觉应该swap了所有该swap的 最后再扫一遍吧

n)

【在 d*******y 的大作中提到】
: 一个array size n, element from 1 ~ n-1, 不确定有多少个duplicate,怎样用O(n)
: 的时间和 O(1)的空间来找出duplicate的元素。可以修改array
: 有人用这种code,这个是O(n)的复杂度吗?怎么分析呢?
: for 1 <= i <= n:
: while A[i] ≠ i:
: if A[A[i]] = A[i]: return A[i]
: swap(A[A[i]], A[i])

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。