zoukankan      html  css  js  c++  java
  • 368.[LeetCode] Largest Divisible Subset

    条件:动态规划

    当nums[j]%nums[i]==0时,dp[i] = max(dp[i], dp[j]+1)

    为了返回数组,使用pair记录路径

    class Solution {
    public:
        vector<int> largestDivisibleSubset(vector<int>& nums) {
         //变量和初始值的定义 vector<int> res; if(nums.size()<1) return res;//临界条件 sort(nums.begin(),nums.end(),greater<int>());//greater<int>()表示由大到小排序 int len=nums.size(),k=0,curMax=1;//k代表取得curMax位置时候的位置。 vector<int> dp(len,1),pair(len,0); for(int i=0;i<len;i++) pair[i]=i; for(int i=1;i<len;i++){ for(int j=0;j<i;j++){ if(nums[j]%nums[i]!=0) continue; if(dp[i]<dp[j]+1) pair[i]=j,dp[i]=dp[j]+1;//pair[i]=j表示i的前一个是j//这个会把最大值覆盖掉吗?应该不会的,如果更新了dp[i],dp[i]是一直变大。 if(curMax<dp[i]) k=i,curMax=dp[i];//更新curMax,并且更新k值 } } while(k!=pair[k]){ res.push_back(nums[k]),k=pair[k]; } res.push_back(nums[k]); return res; } };

      

  • 相关阅读:
    Solidity 官方文档中文版 3_安装Solidity
    javaweb监听器
    ssh基础配置大全
    servlet
    压缩介绍
    jsp小结
    servlet生命周期
    后台权限验证
    进程&线程
    StrutsPreparedAndExcuteFilter与Interceptor
  • 原文地址:https://www.cnblogs.com/bright-mark/p/9537269.html
Copyright © 2011-2022 走看看