zoukankan      html  css  js  c++  java
  • 力扣 汇总区间

    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?试一试叭。

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

  • 相关阅读:
    Camera
    iOS实现截屏 并合适保存
    将UIView转成UIImage,将UIImage转成PNG/JPG
    iOS7Status bar适配
    @synthesize obj=_obj的意义详解 @property和@synthesize
    iOS各种问题处理
    Foundation框架中的NSNumber对象详解
    iOS 文件和数据管理 (可能会删除本地文件储存)
    当ABAP遇见普罗米修斯
    一个工作13年的SAP开发人员的回忆:电子科技大学2000级新生入学指南
  • 原文地址:https://www.cnblogs.com/KeithTee/p/14257821.html
Copyright © 2011-2022 走看看