LeetCode·Pregunta diaria·2178. Dividir en la suma del mayor número de números positivos e pares·Codicioso

Autor: Xiao Xun
Enlace: https://leetcode.cn/problems/maximum-split-of-positive-even-integers/solutions/2332925/tan-xin-zhu-shi-chao-ji-xiang-xi-by- xun-zoioi/
Fuente: Los derechos de autor de LeetCode
pertenecen al autor. Para reimpresión comercial, comuníquese con el autor para obtener autorización, para reimpresión no comercial, indique la fuente.

tema

 

ejemplo

 

tren de pensamiento

Título -> Dado un entero t, dividirlo en n números pares y devolver un conjunto con el n más grande.

Requerir:

  1. No puede haber valores duplicados entre n números pares
  2. Después de n números pares, para el entero original t

El título requiere que la suma de los números pares después de la división sea igual al número original t, y después de los números pares deben ser números pares, por lo que si t es un número impar, puede regresar directamente vacío.

En segundo lugar, queremos dividirnos en tantos números pares como sea posible, y debemos dividirnos en el menor número de números pares posible. Intente dividir secuencialmente desde el entero par más pequeño 2 hasta que el valor restante sea menor o igual que el entero par más grande que se está dividiendo actualmente.

En este punto, hemos dividido en tantos números pares como sea posible y es imposible dividir más números pares que sean diferentes entre sí.

Si la suma final restante después de la división es mayor que cero en este momento, agregue este valor al entero par más grande, para asegurarse de que todos los números sean diferentes entre sí y la suma sea igual a la suma final.

Los comentarios del código son muy detallados.

el código


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
long long* maximumEvenSplit(long long finalSum, int* returnSize){
    *returnSize = 0;
    if (finalSum & 1) return NULL;//判断奇偶
    long long *ans = (long long *)malloc(sizeof(long long) * (sqrt(finalSum) + 1));//初始化
    for (int i = 2; i <= finalSum; i += 2) {//从小枚举偶数
        ans[(*returnSize)++] = i;//记录集合
        finalSum -= i;//利用 - 代替 + 来判断结束
    }
    //将剩余不足以再开辟一个新位置的偶数和入最大值,保证唯一
    ans[(*returnSize)-1] += finalSum;
    return ans;
}   

作者:小迅
链接:https://leetcode.cn/problems/maximum-split-of-positive-even-integers/solutions/2332925/tan-xin-zhu-shi-chao-ji-xiang-xi-by-xun-zoioi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Supongo que te gusta

Origin blog.csdn.net/m0_64560763/article/details/131573082
Recomendado
Clasificación