zoukankan      html  css  js  c++  java
  • LeetCode-228-汇总区间

    LeetCode-228-汇总区间

    题目

    给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

    示例 1:

    输入: [0,1,2,4,5,7] 输出: ["0->2","4->5","7"] 解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。

    示例 2:

    输入: [0,2,3,4,6,8,9] 输出: ["0","2->4","6","8->9"] 解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

     

    思路

    首先判断数组中数字与前一个数字的差值,如果为1表示连续,不为1则不连续

    记数组中第一位数字为头,开始遍历数组

    判断当前数字是否连续,连续则继续往下,不连续则记录头和当前数字,并把头更新为当前数字

     

    总结

    题目本身不难,但是由于code方式不够严谨,提交的时候遇到了两个错误

    1. 输入为空或只有一个数字的时候,没有进行判断,造成运行或输出错误

    2. 当输入的两个数字相差超过Int表示范围的时候,会出现运行错误

    第一个问题很好解决,加上判断条件就可以了

    第二个问题可以把思路中求当前数字与前一个数字的差值改为:当前数字减1是否为上一个数字即可

    最后结果:

    执行用时 :0 ms, 在所有 cpp 提交中击败了100.00%的用户

    内存消耗 :8.5 MB, 在所有 cpp 提交中击败了59.48%的用户,

    开心:)

     

    代码

    #include <iostream>
    #include <vector>
    #include <cstring>
    #include <sstream>

    using namespace std;

    class Solution{
    public:
    string convertToString(int numA, int numB){
    stringstream sstream;
    if (numA!=numB){
    sstream<<numA<<"->"<<numB;
    }else{
    sstream<<numA;
    }
    return sstream.str();
    }

    vector<string> summaryRanges(vector<int>& nums){
    vector<string> result;
    if (nums.size()==0){
    return result;
    }else if(nums.size()==1){
    result.push_back(convertToString(nums[0], nums[0]));
    return result;
    }
    int head = nums[0];
    for (int i=1; i<nums.size(); i++){
    string info = "";
    if (nums[i]-1!=nums[i-1]){
    info = convertToString(head, nums[i-1]);
    result.push_back(info);
    head = nums[i];
    }
    if (i==nums.size()-1){
    info = convertToString(head, nums[i]);
    result.push_back(info);
    }
    }
    return result;
    }

    };

     

  • 相关阅读:
    python timeit模块用法
    boto3库限速
    golang-Beego-orm创建的坑
    Java07
    Java06
    Java04
    Java03
    c
    Mac 安装GCC
    命令: go build
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/11838873.html
Copyright © 2011-2022 走看看