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

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

程序示例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#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;
}

  效果如图:

posted @   源子陌  Views(438)  Comments(0Edit  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示