面试题 17.04. 消失的数字

数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

注意:本题相对书上原题稍作改动

示例 1:

输入:[3,0,1]
输出:2
 

示例 2:

输入:[9,6,4,2,3,5,7,0,1]
输出:8
通过次数358提交次数575

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-number-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这个是标签为简单的一道题目,但我感觉不是特别好做,也不是因为难,就是我原来的做法比较麻烦,这里介绍几种比较简单的方法。

1、等差数列求和的方法

#include
#include   //包含accumulate函数
using namespace std;
int main()
{
    //求出数据理论值,然后减去现在的数值,就是少的那个数字。
	int n;
	cin >> n;
	int arr[100];
	for(int i = 0;i < n;i++)cin >> arr[i];
	int result = accumulate(arr,arr + n,0);
	int now = (n * (n + 1)) / 2;
	cout << now - result << endl;
	return 0;
}

这里有一个新的函数accumulate(数组开端,数组结束,起始变量);

2、散列化法

#include
using namespace std;
int main()
{
	int n,temp;
	cin >> n;
	bool arr[10000] = {};    //为了搭配i <= n;此时必须要初始化数组
	for(int i = 0;i < n;i++)
	{
		cin >> temp;
		arr[temp] = 1;
	}
	for(int i = 0;i <= n;i++)
	{
        //这里的i <= n;一定要注意,比方说输入0,也就是说数组中只有一个元素0,
        //此时的结果应该是1,缺少1。
		if(!arr[i])
		{
			cout << i << endl; 
			return 0;
		}
	}
	return 0;
}

 

你可能感兴趣的:(刷题)