力扣 汇总区间

2021年 1月10日 星期日

题目描述:

给定一个无重复元素的有序整数数组 nums 。

返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

列表中的每个区间范围 [a,b] 应该按如下格式输出:

"a->b" ,如果 a != b
"a" ,如果 a == b
 

示例 1:

输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"
示例 2:

输入:nums = [0,2,3,4,6,8,9]
输出:["0","2->4","6","8->9"]
解释:区间范围是:
[0,0] --> "0"
[2,4] --> "2->4"
[6,6] --> "6"
[8,9] --> "8->9"
示例 3:

输入:nums = [ ]
输出:[ ]
示例 4:

输入:nums = [-1]
输出:["-1"]
示例 5:

输入:nums = [0]
输出:["0"]
 

提示:

0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums 中的所有值都 互不相同
nums 按升序排列

我写的代码是这样的:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 char ** summaryRanges(int* nums, int numsSize, int* returnSize){
 4     printf("[");
 5     int p = 0;                                                      //p是指第几位数
 6     for(int i = 0 ; i< numsSize; i ++){
 7         p = i;
 8         if(numsSize==1){                        //如果数组中只有一个元素,那么直接输出就OK
 9             printf(""%d"",nums[i]);           //
10             break;                              //
11         }
12         for(; ; i++){                                   //通过小的循环判断是不是存在下一个数字等于本数字+1
13             if(nums[i+1]!=nums[i]+1){               //如果不等了,即说明数字“断”了,退出小循环
14                 break;
15             }
16         }
17         if(p!=i){                                       //如果a!=b,这样输出
18             printf(""%d->%d"",nums[p],nums[i]);
19         }
20         else if(p == i){                            //如果a==b,这样输出
21             printf(""%d"",nums[i]);
22         }
23         if(i!=numsSize-1){
24             printf(",");
25         }
26 
27     }
28     printf("]");
29     return 0;
30 }
31 int main(){
32     int nums[]={0,1,2,4,5,7};
33     int numsSize = sizeof(nums)/sizeof(int);            //求出数组的长度
34     int returnSize[10];
35     summaryRanges(nums,numsSize,returnSize);
36     return 0;
37 }

说明一下:其中的returnSize数组我没有用,我直接在函数中输出了。。。原因是我看不太懂leetcode想要我输出什么,难道是在int类型的数组中输出带有"->"的?很奇怪。。吐槽

我想了想,试试这样可不可以:例如,应该输出的是["0->2","4->5","7"],我将returnSize数组内填上0,2,4,5,7?试一试叭。

不得不想吐槽一下力扣。。。

原文地址:https://www.cnblogs.com/KeithTee/p/14257821.html