51-数组中重复的数字

来源:互联网 发布:生化危机6武器数据 编辑:程序博客网 时间:2024/06/01 10:58

第一次写的会有死循环,因为在交换的过程中可能就会出现有相同的情况。第一次写的是都交换完了再比较,应该是交换的过程中比较:

错误的:

for ( i = 0; i < length; i++){if (numbers[numbers[i]] == numbers[i] && numbers[i] != i){break;}else{while (numbers[i] != i){int temp = numbers[numbers[i]];numbers[numbers[i]] = numbers[i];numbers[i] = temp;}}}

正确的:

 bool duplicate(int numbers[], int length, int* duplication) {        if(length<=0||numbers==NULL)            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[numbers[i]] == numbers[i]){*duplication = numbers[i];return true;}else{int temp = numbers[numbers[i]];numbers[numbers[i]] = numbers[i];numbers[i] = temp;   }   }}   return false;    }


原创粉丝点击