求解连续数列

August 12, 2020

求解连续数列

已知连续正整数数列{K}=K1,K2,K3…Ki 的各个数相加之和为 S,i=N (0<S<100000, 0<N<100000), 求此数列 K。输入描述: 输入包含两个参数,1)连续正整数数列和 S,2)数列里数的个数 N。 输出描述:
如果有解输出数列 K,如果无解输出-1

答案一:

let solution = (target, len) => {
  let arr = new Array(len).fill(0).map((i, index) => index)
  let sum = eval(arr.join("+"))
  if ((target - sum) % len === 0) {
    const a = (target - sum) / len
    return arr.map(i => i + a)
  }
  return -1
}

复杂度分析:

  • 时间复杂度:O(1)

  • 空间复杂度:O(n)

答案二:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */

function solution(sum, n) {
  let arr = []
  let startNum = sum / n - (n - 1) / 2
  if (n % 2 !== 0 && sum % n === 0) {
    for (let i = 0; i < n; i++) {
      arr.push(startNum)
      startNum++
    }
    return arr
  } else if ((sum % n) * 2 == n) {
    for (let i = 0; i < n; i++) {
      arr.push(startNum)
      startNum++
    }
    return arr
  } else {
    return -1
  }
}

复杂度分析:

  • 时间复杂度:O(n), 我们只遍历了包含有 n 个元素的列表一次。在表中进行的每次查找只花费 O(1)的时间。

  • 空间复杂度:O(n), 所需的额外空间取决于哈希表中存储的元素数量,该表最多需要存储 n 个元素。


Profile picture

Written by Jonas who lives and works in ShangHai building useful things. You should follow him on Github