【思路】
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
void Bubble_sort(int arr[], int size) {
int temp;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int* findErrorNums(int* nums, int numsSize, int* returnSize) {
Bubble_sort(nums, numsSize);
int* result = (int*)malloc(sizeof(int) * 2);
int duplicate = 0, missing = 0;
// 查找重复的数字
for (int i = 0; i < numsSize - 1; i++) {
if (nums[i] == nums[i + 1]) {
duplicate = nums[i];
break;
}
}
// 计算总和
int expectedSum = (numsSize * (numsSize + 1)) / 2;
int actualSum = 0;
for (int i = 0; i < numsSize; i++) {
actualSum += nums[i];
}
// 通过公式计算丢失的数字
missing = expectedSum - (actualSum - duplicate);
result[0] = duplicate; // 重复的数字
result[1] = missing; // 丢失的数字
*returnSize = 2;
return result;
}
【注意】:返回的 result 得是 malloc 开辟的一块空间,同时 *returnSize 等于 result 里面有效数据的个数。
【总结】:菜了,想不到公式法算缺失的数据。
继续干!