/*
* 方法一:标记法,将对应arr[i]位置的元素标记为相反数,注意当arr[i]==len时的情况,用一个变量记录这种情况
* 注意当arr[i] == 0时候的情况,用一个变量记录这种情况。
*/
int missingNumber_bak(int* arr, int len){
int i, arrlen=1, index0=INT_MAX, index;
for(i=0; i<len; i++){
index = abs(arr[i]);
if(index < len) {
arr[index] = -arr[index];
}else{
arrlen = -1;
}
if(index< len && arr[index] == 0){
index0 = index;
}
}
if(arrlen > 0) return len;
for(i=0; i<len; i++){
if(arr[i] > 0)
return i;
if(arr[i] == 0 && index0==INT_MAX){
return i;
}
}
return 8;
}
/*
* 方法二: 0-N累加和为(N+1)*N/2,先求出累加和,然后减去数组中每一项,最终结果就是缺少的那一项。
*/
int missingNumber(int *arr, int len){
int cnt = (len+1)*len/2, i;
for(i=0; i<len; i++){
cnt -= arr[i];
}
return cnt;
}
leetcode-268. 缺失数字-C语言
最新推荐文章于 2025-02-20 16:08:12 发布