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

    题目描述:

      给定一个无重复的有序整数数组 nums;

      返回恰好覆盖数组中所有数字的最小有序区间范围列表。也就是说nums中的每个

      元素都恰好被包含在某个区间内,并且不存在nums中的某个元素不属于某个范围内

      输出格式要求:

      • “a->b”,如果 a!=b
      • "a",如果 a==b 

    示例:

      输入:nums=[0,1,2,4,5,7]

      输出:['0->2','4->5','7']

      输入:nums=[0,2,3,4,6,8,9]

      输出:['0','2->4','6','8->9']

    综合解法(javascript):

    console.log('汇总区间');
    var nums=[0,1,2,4,5,7];
    // var nums=[0,2,3,4,6,8,9];
    var summary_result=[];
    function summaryDeal(nums){
        if(nums.length===0) return;
        var start_index=0,end_index=0;
        for(let index=1;index<=nums.length;index++){        
            if(nums[index]==nums[start_index]+(index-start_index)){
                end_index=index;
                if(index==nums.length-1){
                    let str =String(nums[start_index])+'->'+String(nums[end_index]);
                    summary_result.push(str);
                    return;
                }            
            }else{
                let str =end_index>start_index?String(nums[start_index])+'->'+String(nums[end_index]):String(nums[start_index]);
                summary_result.push(str);
                start_index=index;
            }        
        }
        return;
    }
    console.time('a');
    summaryDeal(nums);
    console.timeEnd('a'); //0.33
    console.log('元数组:',nums);
    console.log('汇总区间结果:',summary_result);

    总结:

       针对汇总区间的解法,简单易解;这里就解题中需要注意的事项做个记录:

      1. 算法中使用到的起始,末尾位置的标记;
      2. 数组尾部元素的处理;由分析可得数组尾部包含两种情况
        • 尾部属于单个元素即不和前面元素构成一个范围
        • 尾部元素属于单个范围   

      只要上述两种情况处理好,本题就结束了。

    版权声明:本文为博主原创文章,如需转载,请标明出处

  • 相关阅读:
    access将一个表中的记录插入到另一个表中
    在Windows Azure中使用CQRS
    Hazelcast 2.0发布,推出堆外存储和分布式备份
    Telefónica与Mozilla携手开拓首个开放互联网设备
    拥有完整硬件访问权限的本地Silverlight
    Mozilla BrowserQuest
    Doclist压缩方法简介
    CodePlex提供Git支持
    主流浏览器版本发布历史
    access截取字符
  • 原文地址:https://www.cnblogs.com/gamecc666/p/14660331.html
Copyright © 2011-2022 走看看