Deo zbornika Učimo algoritme

Najduža uzastopna sekvenca

Algoritam za nalaženje najduže uzastopne sekvence u nizu brojeva.

Nalazi najdužu sekvencu

function findLongestSeq(arr) {
  let maxLen = 0, currentLen = 1
  let longestSeq = [], currentSeq = [arr[0]]

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] === arr[i - 1] + 1) {
      currentSeq.push(arr[i])
      currentLen++
    } else {
      if (currentLen > maxLen) {
        maxLen = currentLen
        longestSeq = [...currentSeq]
      }
      currentLen = 1
      currentSeq = [arr[i]]
    }
  }

  if (currentLen > maxLen) {
    longestSeq = [...currentSeq]
  }

  return longestSeq
}

const brojevi = [1, 2, 3, 5, 6, 7, 8, 10]
console.log(findLongestSeq(brojevi))

Nalazi dužinu najduže sekvence

Ovo je prostija verzija algoritma, ako nam je potrebna samo dužina sekvence:

function duzinaNajduzeSekvence(arr) {
  if (arr.length === 0) return 0

  let maxDuzinaSekvence = 1 
  let trenutnaDuzina = 1 

  for (let i = 1; i < arr.length; i++) {
    if (arr[i] === arr[i - 1] + 1) {
      trenutnaDuzina++
    } else {
      maxDuzinaSekvence = Math.max(maxDuzinaSekvence, trenutnaDuzina)
      trenutnaDuzina = 1
    }
  }

  return Math.max(maxDuzinaSekvence, trenutnaDuzina)
}

const brojevi = [1, 2, 3, 5, 6, 7, 8, 10]
console.log(duzinaNajduzeSekvence(brojevi))