Leetcode 368. El subconjunto divisible más grande (DÍA 48) ---- Período de aprendizaje de programación dinámica (El Templo del Valor es realmente divertido, qwq no es leer libros)

Titulo original

Inserte la descripción de la imagen aquí



Implementación de código (consulte la solución para la primera parte del pincel y la parte de auto-resolución)

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

int cmp(const void*a,const void*b)
{
    
    
    return *(int*)a - *(int*)b;
}

int* largestDivisibleSubset(int* nums, int numsSize, int* returnSize){
    
    
    qsort(nums,numsSize,sizeof(int),cmp);
    int* dp = (int*)malloc(sizeof(int) * (numsSize+1)),i,j,pos = 0,max = 0;
    int* position = (int*)malloc(sizeof(int) * (numsSize+1));
    dp[0] = 1,position[0] = 0;
    for(i=1;i<numsSize;i++)
    {
    
    
        dp[i] = 1;
        position[i] = i;
        for(j=0;j<i;j++)
        {
    
    
            if(!(nums[i] % nums[j]))
            {
    
    
                if(dp[i] < dp[j] + 1)   position[i] = j;
                dp[i] = fmax(dp[i],dp[j]+1);
            } 
        }
        if(dp[i] > max)
        {
    
    
            pos = i;
            max = dp[i];
        }
    }

    int* ret = (int*)malloc(sizeof(int) * (dp[pos]));
    (*returnSize) = dp[pos];
    for(i=dp[pos]-1;i>=0;i--)
    {
    
    
        ret[i] = nums[pos];
        pos = position[pos];
    }
    return ret;
}

Supongo que te gusta

Origin blog.csdn.net/qq_37500516/article/details/113844671
Recomendado
Clasificación