Demostrar la oferta de seguridad [41] - un continuo y positivo secuencia S

título Descripción

Xiao Ming es muy aficionado a las matemáticas, un día, cuando estaba haciendo la tarea de matemáticas, necesario para calcular y 9 a 16, de inmediato escribió la respuesta correcta es 100. Pero no estaba satisfecho con esto, se preguntó cómo muchos tipos de número de secuencia positiva continua es de 100 (incluyendo al menos dos números). En poco tiempo, se puso otro conjunto de números positivos consecutivos y una secuencia de 100: 18,19,20,21,22. Ahora la pregunta a usted, usted también puede identificar rápidamente todas las secuencias positiva y continua S? Buena suerte!

Descripción Salida :

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

Esta pregunta puede utilizar la idea de algoritmo de programación dinámica de inicializar una matriz, la matriz es menor que sumel número positivo de una especie única de la matriz, creamos dos punteros leftal rightpunto de 0, y luego crear una nueva variable de countregistro de leftun puntero a righty una matriz de punteros. A continuación, iniciar whilelos ciclos de cada comparación countcon sumel tamaño, si es countmenor, entonces así right++, si countgrande, lo hará left--, entonces será igual a leftun puntero a rightuna matriz de punteros en el resmedio. Final del ciclo de retorno resa.

function FindContinuousSequence(sum)
{
    let i = 1;
    let temp = new Array(sum-1).fill(1).map(x=>i++)
    let res = [];
    let left = 0;
    let right = 0;
    let count = 0;
    while(right!=sum){
        if(count<sum){
            count += temp[right];
            right++;
        }
        else if(count==sum){
            res.push(temp.slice(left, right));
            count -= temp[left];
            left++;
        }else{
            count -= temp[left];
            left++;
        }
    }
    return res;
}

Supongo que te gusta

Origin www.cnblogs.com/Jacob98/p/12580355.html
Recomendado
Clasificación