AT3525 题解

题目传送门

小学生又双叒叕来写题解啦!

翻了一下大家的思路,怎么都一样?

当数量达到 \(10^7\) 时,题解代码全爆掉!

你问为什么,时间效率 \(O(n)\) 不稳过吗?

对,可是空间复杂度呢,显然爆掉。

因此,我使用滚动数组。

由于需要关注两个相邻的数,我们自然就只需用两个变量代替数组。

其他思路还是一样的,其他题解都讲明白了,因此不再赘述。

送上满分代码:

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
	int n, cnt = 0, last, now;
	scanf("%d", &n);
	scanf("%d", &now);
	for (int i = 2; i <= n; i++)
	{
		//下面两行滚动数组的实现。 
		last = now;
		scanf("%d", &now);
		if (last == i-1) swap(now, last), cnt++;
	}
	if (now == n) cnt++; //最后一个数没有处理到,要额外补处理。 
	printf("%d\n", cnt);  //勿忘祖传换行。 
	return 0;
}

首发:2022-02-04 22:57:26

posted @ 2022-08-25 00:15  liangbowen  阅读(15)  评论(0编辑  收藏  举报