603

来源:互联网 发布:淘宝开店年龄有限制吗 编辑:程序博客网 时间:2024/06/16 21:16

2017.9.5

开始接触动态规划的题目,一个上午的时间,绕了不少的弯路。最后在网上看解决方法,才知道使用动态规划。

接下来几天可以多做一些动态规划的题目。

重点就是要找到状态转移方程。

public class Solution {    /**     * @param nums a set of distinct positive integers     * @return the largest subset      */     /** 学习使用动态规划 * 状态转移方程为  dp[i] = max{dp[i],dp[j]+1]} */public static LinkedList<Integer> largestDivisibleSubset(int[] nums) {        // Write your code hereLinkedList<Integer> res = new LinkedList<Integer>();int length = nums.length;if(length == 0){return null;}Arrays.sort(nums);/** dp 用来记录包含num[i]的最大集合的size; * pre 用来记录最大集合的路径,也就是记录包含num[i]的最大集合的前一位数字的位置。 * */int []dp = new int[length]; int []pre = new int[length];int maxSize = 1;int maxFlag = 0;//初始化for(int i = 0; i < length; i++){dp[i] = 1;pre[i] = -1;}for(int j = 1; j < length; j++){for(int i = 0; i < j; i++){if(nums[j] % nums[i] == 0 && dp[j] < dp[i] + 1){dp[j] = dp[i] + 1;pre[j] = i;if(dp[j] > maxSize){maxSize = dp[j];maxFlag = j;}}}}res.add(nums[maxFlag]);while(pre[maxFlag] != -1){res.add(nums[pre[maxFlag]]);maxFlag = pre[maxFlag];}return res;    }}


原创粉丝点击