面试题:找数组中最大连续子序列

2018-08-17  本文已影响0人  开心小蜗

试题:假设有数组 [6, 1, 10, 2, 11, 12, 3, 4, 15, 16] 包含1,2,3,4610, 11, 1215, 16等几个连续的子序列,找到其中最大的子序列

var arr = [6, 1, 10, 2, 11, 12, 3, 4, 15, 16]

function maxSubSeq (arr) {
  var copy = arr.slice(0)
  var count = 1
  var start = 0
  var preserveCount = 0
  var preserveStart = 0

  copy.sort((a, b) => a - b)
  for (var i = 0; i < copy.length; i++) {
    if (copy[i + 1] - copy[i] === 1) {
      count++
    } else {
      if (count > preserveCount) {
        preserveCount = count
        preserveStart = start
      }
      count = 1
      start = i + 1
    }
  }
  return copy.slice(preserveStart, preserveStart + preserveCount)
}

maxSubSeq(arr)
上一篇 下一篇

猜你喜欢

热点阅读