- 题目含义:
本题并不是让你复现给的代码,而是以更简单的时间复杂度实现。
- 题目思路:
相当于找规律,首先打印出example1 里的变量改变情况。
可以从上图看出,每次cur初始值递增,相当于设定了一个界限min, cur < min时,更新这个界限为 cur;同时res增加的部分,相当于 遍历的步长i + 1。因为每次都从头遍历一遍,而cur递增,前面的部分一样。 最后ans += len(str),因为如果cur没有 < min, 会一直进行到遍历完字符串,从头到尾遍历了一遍此字符串, 要加上长度。
举例说明, --±。 初试 cur = min = ans = 0;
遍历这个字符串
第一个为 - ,则 cur --,此时 cur < min,更新min为-1,ans += 1;
第二个为 -, 则 cur – ,此时 cur <min ,更新min为-2,ans += 2;
第三个为 +,则cur ++,cur = -1;
第四个为 - ,则cur – ,cur = -2.遍历完成。
ans += 4. ans = 7.
- 代码
#include "bits/stdc++.h"
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
#