lintcode(603)Largest Divisible Subset

来源:互联网 发布:js手机上下滑动事件 编辑:程序博客网 时间:2024/06/05 11:22

Description:

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.

Explanation:

Given nums = [1,2,3], return [1,2] or [1,3]

Given nums = [1,2,4,8], return [1,2,4,8]

Solution:

Dynamic programming. Set up two arrays, one records the path, the other records the number. 

public class Solution {    /**     * @param nums a set of distinct positive integers     * @return the largest subset      */    public List<Integer> largestDivisibleSubset(int[] nums) {        // Write your code here        ArrayList<Integer> result = new ArrayList<Integer>();        if(nums == null || nums.length == 0){            return result;        }                Arrays.sort(nums);                int len = nums.length;        int[] count = new int[len];        Arrays.fill(count , 1);        int[] path = new int[len];        Arrays.fill(path , -1);        int max = 0;                for(int i = 0;i<len;i++){            for(int j = 0;j<i;j++){                if(nums[i]%nums[j] == 0 && count[j]+1 > count[i]){                    count[i] = count[j] + 1;                    path[i] = j;                }            }            if(count[i] > count[max]){                max = i;            }        }                for(int i = max;i >= 0;i = path[i]){            result.add(nums[i]);        }                return result;    }}


原创粉丝点击