zoukankan      html  css  js  c++  java
  • 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;
        }
    }
  • 相关阅读:
    cJson
    STemWin
    TEA通讯加密
    stm32串口收发导致的死机
    C语言版数据结构算法
    FIFO
    IAP远程在线升级
    LWIP
    电能计量芯片
    单片机里的堆栈
  • 原文地址:https://www.cnblogs.com/yanhowever/p/11842974.html
Copyright © 2011-2022 走看看