|
发表于 2023-11-5 18:03:52
|
显示全部楼层
运行超时的问题通常是由于算法复杂度过高导致的。在这段代码中,存在一个时间复杂度较高的部分,即对每个数字进行字符串转换和查找字符的操作。
为了优化代码,可以考虑以下几点:
1. 避免重复的字符串转换操作:在循环中,对每个数字都进行了字符串转换操作,这是一个耗时的操作。可以在循环外部先将所有数字转换成字符串,然后在循环中直接使用转换后的字符串。
2. 减少字符查找的次数:在当前代码中,对每个数字都进行了字符查找操作。可以通过将数字转换成字符串后,使用一个标志变量来记录是否存在字符'2',而不是每次都进行查找操作。
3. 优化循环结构:可以考虑使用更高效的循环结构,例如使用递增的方式遍历数字,而不是从l到r的方式遍历。
下面是优化后的代码示例:
- #include <bits/stdc++.h>
- using namespace std;
- int n, m, l, r;
- int countDigits(int num) {
- int count = 0;
- while (num > 0) {
- if (num % 10 == 2) {
- return 1;
- }
- num /= 10;
- }
- return 0;
- }
- int main() {
- cin >> n >> m;
- vector<string> nums;
- for (int i = 0; i < m; i++) {
- scanf("%d %d", &l, &r);
- int res = 0;
- for (int j = l; j <= r; j++) {
- nums.push_back(to_string(j));
- }
- for (const string& s : nums) {
- res += countDigits(stoi(s));
- }
- cout << res << endl;
- nums.clear();
- }
- return 0;
- }
复制代码
通过上述优化,可以减少了字符串转换和字符查找的次数,从而提高了代码的运行效率。 |
|