给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
“a->b” ,如果 a != b
“a” ,如果 a == b
#include <iostream>
#include <vector>
#include <string>
std::vector<std::string> findRange(const std::vector<int>& nums) {
std::vector<std::string> ranges;
if (nums.empty()) {
return ranges;
}
int start = nums[0];
int end = nums[0];
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] == end + 1) {
end = nums[i];
} else {
if (start == end) {
ranges.push_back(std::to_string(start));
} else {
ranges.push_back(std::to_string(start) + "->" + std::to_string(end));
}
start = end = nums[i];
}
}
if (start == end) {
ranges.push_back(std::to_string(start));
} else {
ranges.push_back(std::to_string(start) + "->" + std::to_string(end));
}
return ranges;
}
int main() {
std::vector<int> nums = {1, 2, 3, 6, 7, 9};
std::vector<std::string> result = findRange(nums);
// Check and add the last range if any
if (!result.empty()) {
std::cout << "The minimum ordered range list covering all numbers is: ";
for (const auto& range : result) {
std::cout << range << " ";
}
std::cout << std::endl;
}
return 0;
}