• leetcode 368. 最大整除子集 java


    题目:

    给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。

    如果有多个目标子集,返回其中任何一个均可。

    示例 1:

    输入: [1,2,3]
    输出: [1,2] (当然, [1,3] 也正确)
    示例 2:

    输入: [1,2,4,8]
    输出: [1,2,4,8]

    解题:

    1,先排序
    2,后从小到大逐渐动态规划找出最长路径的上一个数的下标来源
    3,然后回溯路径得到最终解

    class Solution {
        public List<Integer> largestDivisibleSubset(int[] nums) {
            List<Integer> ans=new ArrayList<>();
            if (nums.length==0){
                return ans;
            }
            //dp负责计算集合元素个数  dp2负责保存上一个数的下标
            int[] dp=new int[nums.length];
            int[] dp2=new int[nums.length];
            Arrays.fill(dp,1);
            Arrays.fill(dp2,-1);
            Arrays.sort(nums);
            for (int i=1;i<nums.length;i++){
                for (int j=0;j<i;j++){
                    if (nums[i]%nums[j]==0){
                        if (dp[i]<dp[j]+1){
                            dp[i]=dp[j]+1;
                            dp2[i]=j;
                        }
                    }
                }
            }
            int index=0;
            //找到最大的整数子集
            for (int i=1;i<nums.length;i++){
                if (dp[i]>dp[index]){
                    index=i;
                }
            }
            while (index!=-1){
                ans.add(nums[index]);
                index=dp2[index];
            }
            return ans;
        }
    }
  • 相关阅读:
    hql语句
    eclipse部署jrebel热启动后报错java.lang.OutOfMemoryError: PermGen space问题
    jQuery冒泡事件
    oracle中使用序列生成编号
    月份-日期下拉框联动变换日期
    xml运用1
    Oracle 数据库 ORA-01034
    Spring中IOC&AOP
    使用可视化图表对 Webpack 2 的编译与打包进行统计分析
    数据驱动
  • 原文地址:https://www.cnblogs.com/yanhowever/p/11842974.html
Copyright © 2020-2023  润新知