小学生又双叒叕来写题解啦!
每个数都不受限制的可以变成三个数,那我们就用数组存每个数的变身情况,每次都给那三个数对应的计数器加一即可。
然后呢?
大家的思路都是在最后再遍历一次数组,并找最大值。
实际上根本不需要这一个重新搜的动作,只需在每次加计数器时都比较一次即可。
这样就对常数做了优化。
实际上可以利用指针进行进一步的优化,但没必要,反正总体的时间效率差别不大,就没必要浪费十几行再优化常数了。
送上满分代码:
#include <iostream>
#include <cstdio>
using namespace std;
int box[100005];
int main()
{
int n, maxn = -1;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
int x;
scanf("%d", &x);
box[x-1]++, maxn = max(maxn, box[x-1]); //一边走一边判断。
box[x]++, maxn = max(maxn, box[x]);
box[x+1]++, maxn = max(maxn, box[x+1]);
}
printf("%d\n", maxn); //勿忘祖传换行。
return 0;
}
首发:2022-02-04 17:27:27
标签:27,int,题解,AT3524,include,优化 From: https://www.cnblogs.com/liangbowen/p/16622793.html