给一个由n-1个整数组成的未排序的序列,其元素都是1~n中的不同的整数。如何在线性时间复杂度内寻找序列中缺失的整数

思路分析:尼玛这不就是等差数列么。首先将该n-1个整数相加,得到sum,然后用(1+n)n/2减去sum,得到的差即为缺失的整数。因为1~n一共n个数,n个数的和为(1+n)n/2,而未排序数列的和为sum,二者之差即为确实的数。

程序示例如下:

#include "stdafx.h"

#include <stdio.h>

#define MAX 5

int main()

{

	int array[MAX] = { 3, 2, 1, 6, 4 };

	int i;

	int sum = 0;

	int temp;

	for (i = 0; i < MAX; i++)

		sum += i;

	temp = (MAX + 1)*(MAX) / 2 - sum;

	printf("%d\n", temp);

	getchar();

	return 0;

}

  效果如图:

给一个由n-1个整数组成的未排序的序列,其元素都是1~n中的不同的整数。如何在线性时间复杂度内寻找序列中缺失的整数

你可能感兴趣的:(时间复杂度)