Menu
CoddyTech

Split Array Largest Sum

Você recebe um array nums de inteiros não negativos e um inteiro k. Divida nums em exatamente k partes, em que cada parte é uma sequência não vazia de valores vizinhos e as partes mantêm sua ordem. Cada parte tem uma soma, e o custo de uma divisão é a maior dessas somas.

Retorne o menor custo que qualquer divisão em k partes pode alcançar.

Função

splitArray(nums: integer-array, k: integer) → integer
numsinteger-array
os valores não negativos, em ordem
kinteger
o número de partes contíguas em que cortá-los
Retornainteger
o menor valor possível da soma da maior parte

Restrições

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 105
  • 1 ≤ k ≤ nums.length
  • Cada parte contém pelo menos um valor. Uma parte cujos valores são todos 0 soma 0, o que é permitido.

Exemplos

Entrada
nums = [6, 2, 9, 4, 7, 3]k = 3
Saída
13
Explicação
A divisão [6, 2], [9, 4], [7, 3] tem somas 8, 13 e 10, portanto seu custo é 13. Nenhuma divisão tem custo 12: ao agrupar as partes da esquerda para a direita, com cada soma no máximo 12, obtemos [6, 2], [9], [4, 7], [3], quatro partes, quando só três são permitidas.

lock icon+20 testes ocultos ao enviar

challenge icon

Para ir além

Cada verificação gulosa lê todos os valores de n. Com somas de prefixo, uma verificação pode encontrar onde cada parte termina usando busca binária. Qual é a velocidade do método inteiro quando k é pequeno e nums é longo?

Redefinir código
def splitArray(nums, k):
    # Escreva o código aqui
Casos de teste

Caso 1

Caso 2

Caso 3

Entrada

nums = [6, 2, 9, 4, 7, 3]
k = 3

Esperado

13