Largest Divisible Subset

http://www.lintcode.com/zh-cn/problem/largest-divisible-subset/

package com.LintCode.Largest;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

public class Solution {
    /*
     * @param nums: a set of distinct positive integers
     * @return: the largest subset 
     */
    public List largestDivisibleSubset(int[] nums) {
        // write your code here
//        先把数组排序,然后只需要后边的数%它的前一个数为0就全部符合
//        3 6 9  可能是 3 6也可能是 39,但是我们如果从后向前就只有一种了。所以应该从尾部开始遍历
        Arrays.sort(nums);
        List res = new ArrayList<>();
        LinkedList temp = new LinkedList<>();
        for (int i = nums.length - 1; i >= res.size(); i--) {
//            当所有的数都放进去还比结果当前的长度小时就没有必要再继续了。
            temp.clear();
            temp.add(nums[i]);
            for (int j = i - 1; j >= 0; j--) {
                if (temp.getLast() % nums[j] == 0) {
                    temp.add(nums[j]);
                }
            }
            if (temp.size() > res.size()) {
                res.clear();
                res.addAll(temp);
            }
        }
        return res;
    }
}

你可能感兴趣的:(Largest Divisible Subset)