当前位置:   article > 正文

给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)...

有一个长度为n的数组,其中1到n每个元素恰好出现一次,想知道在数组中xy是否相
  1. int if_dup(int arr[], int len)
  2. {
  3. int i = 0;
  4. for (; i < len; i++) {
  5. if (arr[arr[i]] == -1)
  6. return -1;
  7. arr[arr[i]] = -1;
  8. }
  9. return 0;
  10. }

  

方法1.

对数组进行排序(快速,堆),然后比较相邻的元素是否相同。
时间复杂度为O(nlogn),空间复杂度为O(1)。

方法2.
使用bitmap方法。
定义长度为N/8的char数组,每个bit表示对应数字是否出现过。遍历数组,使用 bitmap对数字是否出现进行统计。
时间复杂度为O(n),空间复杂度为O(n)。

方法3.
遍历数组,假设第 i 个位置的数字为 j ,则通过交换将 j 换到下标为 j 的位置上。直到所有数字都出现在自己对应的下标处,或发生了冲突。
时间复杂度为O(n),空间复杂度为O(1)。

转载于:https://www.cnblogs.com/dartagnan/archive/2011/09/29/2195705.html

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/295231
推荐阅读
相关标签
  

闽ICP备14008679号