题目

Given a sorted integer array without duplicates, return the summary of its ranges.

For example, given [0,1,2,4,5,7], return ["0->2","4->5","7"].

大致意思

给定一个数组,把他们之前连续的数字进行合并

解决方案

  • 进行遍历整个数组
  • 根据三个数值进行比较,start pre data
  • 一开始的时候,将数组的第一个元素赋给start 和 pre
var start = nums[0];
var pre = start;
  • 我们在循环遍历的时候,根据 data - pre != 1的判断,判断是否整个数据是连续的。

    • 如果是连续的话,我们持续遍历,将pre = data
    • 如果不是连续的话,我们将start 和 pre push进大数组中去
    • 这里我们需要判断,如果start === pre 的话,push一个即可
function pushValue(start, pre, array) {
  if (pre === start) {
    array.push([pre])
  } else {
    array.push([start, pre]);
  }
}
  • 遍历完所有之后,需要再次进行 pushValue(start, pre, array);
  • 最后遍历输出所需要的数据结构
var arr = array.map((d) => {
  return d.join('->');
});

源代码

var summaryRanges = function(nums) {
  if (!nums.length) return [];

  var array = [];
  var start = nums[0];
  var pre = start;
  var data;

  for (var i = 1, l = nums.length; i < l; i++) {
    data = nums[i];

    if (data - pre != 1) {
      pushValue(start, pre, array);
      start = data;
    }
    pre = data;
  }

  pushValue(start, pre, array);

  var arr = array.map((d) => {
    return d.join('->');
  });

  return arr;
};

function pushValue(start, pre, array) {
  if (pre === start) {
    array.push([pre])
  } else {
    array.push([start, pre]);
  }
}