[每日练习]Amazon面试题:数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间

来源:互联网 发布:用java计算pai的值 编辑:程序博客网 时间:2024/05/16 09:27

问题描述:

数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间


the code:

#include <stdio.h>
#include <math.h>

//数组有N-2个数字,数字的范围为1 ... N,没有重复的元素,要求打印缺少的2个数字,不可以用额外的空间。
static void FindTwoMissedElements(int *arr, int n)
{
 int N = n+2;
 int sum = (N+1)*N/2;
 int qsum = sum*(2*N+1)/3;
 int i, a_b;

 for(i=0; i<n; i++)
 {
  sum -= arr[i];
  qsum -= arr[i]*arr[i];
 }

 a_b = (int)sqrt(2*qsum - sum*sum);

 printf("a=%d, b=%d\n", (sum+a_b)>>1, (sum-a_b)>>1);
}

int main()
{
 int arr[] = {1,2,3,5,6,7,9};
 FindTwoMissedElements(arr, 7);
 return 0;
}


0 0
原创粉丝点击