汇总区间
双指针方案
[1]左指针永远指向区间的左边
[2]右指针用于遍历整个数组
[3]注意整个边界条件的处理(边界或者不连续)
[4]注意 i 的移动
var summaryRanges = function (nums) {let res = [];let i = 0;//从0开始for (let j = 0; j < nums.length; j++) {//边界或者不连续的时候if (j + 1 === nums.length || nums[j] + 1 !== nums[j + 1]) {if (i === j) {res.push(nums[i] + '');} else if (i < j) {res.push(nums[i] + '->' + nums[j]);}//注意切换ii = j + 1;}}return res;}const nums = [0, 1, 2, 4, 5, 7];console.log(summaryRanges(nums));
自我版本实现
var summaryRanges = function (nums) {
let res = [];
//特殊情况
if (nums.length === 0) return res;
if (nums.length === 1) {
res.push(String(nums[0]));
return res;
}
let [left, right] = [nums[0], null];
for (let i = 1; i < nums.length; i++) {
if (nums[i] === nums[i - 1] + 1) {
right = nums[i];
} else {
if (right) {
let str = left + '->' + right;
res.push(str);
} else {
res.push(left + '');
}
[left, right] = [nums[i], null];
}
}
res.push(left + (right !== null ? '->' + right : ''));
return res;
};
