LeetCode 228. 汇总区间-C语言
题目描述
解题思路
从数组的位置0出发向右遍历。每次遇到相邻元素之间的差值大于1时,我们就找到了一个区间。遍历完数组之后,就能得到一系列的区间的列表。
在遍历过程中,维护下标low和high分别记录区间的起点和终点,对于任何区间都有low≤high。当得到一个区间时,根据low和high的值生成区间的字符串表示。
代码
char** summaryRanges(int* nums, int numsSize, int* returnSize) {
char** ret = malloc(sizeof(char*) * numsSize);
*returnSize = 0;
int i = 0;
while (i < numsSize) {
int low = i;
i++;
while (i < numsSize && nums[i] == nums[i - 1] + 1) {
i++;
}
int high = i - 1;
char* temp = malloc(sizeof(char) * 25);
sprintf(temp, "%d", nums[low]);
if (low < high) {
sprintf(temp + strlen(temp), "->");
sprintf(temp + strlen(temp), "%d", nums[high]);
}
ret[(*returnSize)++] = temp;
}
return ret;
}