zoukankan      html  css  js  c++  java
  • 【leetcode】368. Largest Divisible Subset

    题目描述:

    Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0.

    If there are multiple solutions, return any subset is fine.

    解题分析:

    如果a%b==0,则a=mb,所以如果把数组排序后如果a%b==0,且b%c==0则a%c==0。这就为用动态规划实现提供了可能性。设置一个数组result,result[i]表示i出包含的满足条件的子集个数。则如果nums[i]%nums[j]==0,则result[i]=result[j]+1;同时由于函数要返回的是一个List,所以我们要保存最长集合的路径。这个功能可以通过设置一个pre数组保存能被nums[i]整除的上一个数的索引。并在保存max值的同时保存max所在的位置maxIndex即可。

     1 public class Solution {
     2     public static List<Integer> largestDivisibleSubset(int[] nums) {
     3         
     4         if(nums.length==0){
     5             return new ArrayList<Integer>();
     6         }
     7         if(nums.length==1){
     8             List<Integer> array = new ArrayList<Integer>();
     9             array.add(nums[0]);
    10             return array;
    11         }
    12         Arrays.sort(nums);
    13         int len = nums.length;
    14         int[] result=new int[len];
    15         int[] pre=new int[len];
    16         result[0]=nums[0];
    17         pre[0]=-1;
    18         int max=1;
    19         int maxIndex=0;
    20         for(int i=1;i<nums.length;i++){
    21             result[i]=1;
    22             pre[i]=-1;
    23             for(int j=0;j<i;j++){
    24                 if(nums[i]%nums[j]==0){
    25                     result[i]=result[j]+1;
    26                     pre[i]=j;
    27                     if(result[i]>max){
    28                         max=result[i];
    29                         maxIndex=i;
    30                     }
    31                 }
    32                 
    33             }
    34         }
    35         List<Integer> array = new LinkedList<Integer>();
    36         int index = maxIndex;
    37         while(index!=-1){
    38             array.add(0,nums[index]);
    39             index=pre[index];
    40         }
    41         return array;
    42     }
    43 }

     

  • 相关阅读:
    [转]BIOS中断汇编函数---留用
    SWT/JFace 按键、事件、监听
    erlang局域网内通信
    ios热修复
    swift里面!和?的作用
    AFNetworking上传下载图片
    横向滚动的UITableView
    判断iphone手机型号
    iPhone屏幕尺寸、分辨率及适配
    UITapGestureRecognizer 和UIPanGestureRecognizer的使用,触摸和滑动
  • 原文地址:https://www.cnblogs.com/godlei/p/5621990.html
Copyright © 2011-2022 走看看