力扣288和汇总区间

haimian
2024-11-28 / 0 评论 / 7 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年11月28日,已超过142天没有更新,若内容或图片失效,请留言反馈。

给定一个 无重复元素 的 有序 整数数组 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;
}

m41hcca7.png

0

评论 (0)

取消