找出数组中重复的数字

来源:互联网 发布:cad软件锁不起作用 编辑:程序博客网 时间:2024/05/01 02:47

实现算法1

  1. 修改了原始数组
  2. 空间复杂度为O(1)
bool duplicate(int numbers[],int length){    if(numbers==nullptr||length<=0){        return false;    }    for (int i=0; i<length; ++i) {        if(numbers[i]<0||numbers[i]>length-1){            return false;        }    }    for (int i=0; i<length; ++i) {        while (numbers[i]!=i) {            if (numbers[i]==numbers[numbers[i]]) {                cout<<numbers[i]<<endl;//重复的数字                return true;            }            int temp=numbers[i];            numbers[i]=numbers[temp];            numbers[temp]=temp;        }    }    return false;}

实现算法2

int getDuplication(const int* numbers,int length){    if(numbers==nullptr||length<=0){        return -1;    }    int start=1;    int end=length-1;    while (end>=start) {        int middle=((end-start)>>1)+start;        int count=countRange(numbers,length,start,middle);        if(end==start){            if(count>1){                return start;            }else{                break;            }        }        if (count>(middle-start+1)) {            end=middle;        }else{            start=middle+1;        }    }    return -1;}int countRange(const int* numbers,int length,int start,int end){    if(numbers==nullptr){        return 0;    }    int count=0;    for (int i=0; i<length; i++) {        if(numbers[i]>=start&&numbers[i]<=end){            ++count;        }    }    return count;}
原创粉丝点击