如何解决在C ++中使用迭代器时出现缓冲区溢出错误
这是leetcode的问题: https://leetcode.com/explore/learn/card/fun-with-arrays/521/introduction/3237/
给出一个由整数组成的数组,返回其中有偶数个数字的整数。 在不使用迭代器的情况下尝试通过所有测试用例时,虽然使用了如下所示的迭代器方法,但它显示了缓冲区溢出错误,尽管通过了任何自定义测试用例。
您能否说出这种迭代器方法为何失败,为什么会发生此溢出错误以及如何纠正它?
class Solution {
int calculate_digit(int n){
int count = 0;
while(n){
n = int(n/10);
count++;
}
return count;
}
public:
int findNumbers(vector<int>& nums) {
int check;
vector<int>::iterator it;
for (auto it = nums.begin(); it != nums.end(); ++it){
check = calculate_digit(*it);
if(check%2 != 0)
nums.erase(it);
}
return nums.size()-1;
}
};
解决方法
只有三个条件(基于约束)会使count
递增。我们只需检查一下(O(N)
时间O(1)
内存)即可:
// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
// Most of headers are already included;
// Can be removed;
#include <cstdint>
#include <vector>
static const struct Solution {
static const int findNumbers(
std::vector<int>& nums
) {
std::size_t count = 0;
for (std::size_t index = 0; index < std::size(nums); ++index) {
const auto& num = nums[index];
if (
(9 < num && num < 100) ||
(999 < num && num < 10000) ||
(num == 100000)
) {
count++;
}
}
return count;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。