给你一个正整数n和一个长度为n的整数数列 ,请计算出每个元素距离数列 中的0的最短距离。 Input 第一行包含一个正整数n 第二行包含n个整数的数列 , Output 打印一个数列 , 表示 与跟它最近的0的距离,用C++代码
时间: 2024-04-10 11:27:08 浏览: 46
delete--number.rar_K._delete namber_delete number_给定n位正整数
5星 · 资源好评率100%
以下是用C++编写的代码,用于计算每个元素距离数列中的最近的0的距离:
```cpp
#include <iostream>
#include <vector>
#include <climits>
#include <cmath>
std::vector<int> calculateDistances(int n, std::vector<int>& nums) {
std::vector<int> distances(n, INT_MAX); // 初始化距离数组,初始值为最大整数
int lastZeroIndex = -1; // 上一个0的索引位置
// 从左到右遍历,更新距离
for (int i = 0; i < n; i++) {
if (nums[i] == 0) {
distances[i] = 0; // 当前元素为0,距离置为0
lastZeroIndex = i;
} else if (lastZeroIndex != -1) {
distances[i] = i - lastZeroIndex; // 计算当前元素与上一个0的距离
}
}
lastZeroIndex = -1; // 重新设置上一个0的索引位置
// 从右到左遍历,更新距离
for (int i = n - 1; i >= 0; i--) {
if (nums[i] == 0) {
distances[i] = 0; // 当前元素为0,距离置为0
lastZeroIndex = i;
} else if (lastZeroIndex != -1) {
distances[i] = std::min(distances[i], lastZeroIndex - i); // 更新距离为左右两侧最小值
}
}
return distances;
}
int main() {
int n;
std::cin >> n; // 输入正整数n
std::vector<int> nums(n);
for (int i = 0; i < n; i++) {
std::cin >> nums[i]; // 输入整数数列
}
std::vector<int> distances = calculateDistances(n, nums);
// 打印结果
for (int i = 0; i < n; i++) {
std::cout << distances[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
你可以使用上述代码来计算每个元素与最近的0的距离。希望对你有所帮助!如果还有其他问题,请随时提问。
阅读全文