题目描述:
给定一个无重复的有序整数数组 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);
总结:
针对汇总区间的解法,简单易解;这里就解题中需要注意的事项做个记录:
- 算法中使用到的起始,末尾位置的标记;
- 数组尾部元素的处理;由分析可得数组尾部包含两种情况
-
- 尾部属于单个元素即不和前面元素构成一个范围
- 尾部元素属于单个范围
只要上述两种情况处理好,本题就结束了。
版权声明:本文为博主原创文章,如需转载,请标明出处