Leetcode 368. 最大整除子集(DAY 48) ---- 动态规划学习期(英灵神殿真好玩qwq 又没看书麻了)

原题题目

在这里插入图片描述



代码实现(首刷部分看解部分自解)

/**
 * 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;
}

猜你喜欢

转载自blog.csdn.net/qq_37500516/article/details/113844671