数组有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;
}

 

posted @ 2013-09-12 00:24  dmthinker  阅读(343)  评论(0)    收藏  举报