zoukankan      html  css  js  c++  java
  • (笔试题)如何判断数组中是否存在重复元素

    题目:

    假设数组a有n个元素,元素的取值范围为1~n,如何判定数组是否存在重复元素?

    思路:

    方法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)

    代码:

    方法1:

    int cmp(const void* a,const void* b){
        return (*(int*)a-*(int*)b);
    }
    
    // sort and compare
    bool findDuplicate(int* a,int n){
        if(a==NULL || n<=1)
            return false;
    
        qsort(a,n,sizeof(int),cmp);
        for(int i=0;i<n;i++){
            if(a[i+1]>a[i])
                return true;
        }
        return false;
    }

    方法2:

    // changed to the right position
    bool findDuplicate_1(int* a,int n){
        if(a==NULL || n<=1)
            return false;
        
        for(int i=0;i<n;i++){
            int tmp=a[i];
            if(tmp-1==i)
                continue;
            if(tmp==a[tmp-1])
                return true;
            a[i]=a[tmp-1];
            a[tmp-1]=tmp;
            i--;
        }
        
        return false;
    }
  • 相关阅读:
    熟悉常用的Linux操作
    组合数据类型练习
    简易的词法分析程序
    大数据概述
    201552040205 关于对java的体验与感悟
    对已学习的java内容的一些感悟
    关于java中的一些小技巧
    Javase 大纲2
    Javase大纲
    MysQL知识整理
  • 原文地址:https://www.cnblogs.com/AndyJee/p/4716238.html
Copyright © 2011-2022 走看看