给定一个 无重复元素 的 有序 整数数组 nums 。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
列表中的每个区间范围 [a,b] 应该按如下格式输出:
"a->b" ,如果 a != b
"a" ,如果 a == b
我用的哈希的做法
上答案
我看其他人没有人用哈希的,感觉就我一个人。。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 计算最小有序区间范围列表
char** summaryRanges(int* nums, int numsSize, int* returnSize) {
// 用于存储结果区间范围的二维字符数组
char** result = (char**)malloc((numsSize + 1) * sizeof(char*));
int resultIndex = 0;
if (numsSize == 0) {
*returnSize = 0;
return result;
}
int start = nums[0];
int end = nums[0];
for (int i = 1; i < numsSize; i++) {
if (nums[i] == end + 1) {
end = nums[i];
} else {
// 生成当前区间范围的字符串并存储到结果数组
if (start == end) {
result[resultIndex] = (char*)malloc(20 * sizeof(char));
sprintf(result[resultIndex], "%d", start);
} else {
result[resultIndex] = (char*)malloc(40 * sizeof(char));
sprintf(result[resultIndex], "%d->%d", start, end);
}
resultIndex++;
start = nums[i];
end = nums[i];
}
}
// 处理最后一个区间范围
if (start == end) {
result[resultIndex] = (char*)malloc(20 * sizeof(char));
sprintf(result[resultIndex], "%d", start);
} else {
result[resultIndex] = (char*)malloc(40 * sizeof(char));
sprintf(result[resultIndex], "%d->%d", start, end);
}
resultIndex++;
*returnSize = resultIndex;
return result;
}
评论 (0)