数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字
很简单,思路一定要清晰。
//数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字, 空间复杂度O(1)。 #include <iostream> using namespace std; void PrintNotExistNum(int arr[], int n) { bool end = false; bool end_pre = false; for (int i = 0; i < n; ++i) { if (arr[i] == -1 || arr[i] == i + 1) continue; while (arr[i] != -1 && arr[i] != i + 1) { if (arr[i] == n + 1) { arr[i] = -1; end_pre = true; break; } if (arr[i] == n + 2) { arr[i] = -1; end = true; break; } std::swap(arr[i], arr[arr[i] - 1]); } } for (int i = 0; i < n; ++i) { if (arr[i] == -1) cout << i + 1 << endl; } if (!end) cout << n + 2 << endl; if (!end_pre) cout << n + 1 << endl; } int main() { int arr[] = {5,3,7,1,2}; PrintNotExistNum(arr, sizeof(arr)/4); return 1; }
Passion, patience, perseverance, keep it and move on.

浙公网安备 33010602011771号