本文共 870 字,大约阅读时间需要 2 分钟。
给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer ,子集中每一元素对 (answer[i], answer[j]) 都应当满足:
answer[i] % answer[j] == 0 ,或 answer[j] % answer[i] == 0 如果存在多个有效解子集,返回其中任何一个均可。示例 1:
输入:nums = [1,2,3]
输出:[1,2] 解释:[1,3] 也会被视为正确答案。 示例 2:输入:nums = [1,2,4,8]
输出:[1,2,4,8]提示:
1 <= nums.length <= 1000
1 <= nums[i] <= 2 * 109 nums 中的所有整数 互不相同代码:public ListlargestDivisibleSubset(int[] nums) { List list=new ArrayList (); if(nums.length==0) { return list; } Arrays.sort(nums); //记录该元素整除元素的个数 int []dp=new int[nums.length]; //记录该元素整除最近的下一个元素的下标 int []index=new int[nums.length]; Arrays.fill(index,-1); int a=0; for(int i=0;i dp[i]) { dp[i]++; index[i]=j; if(dp[i]>dp[a]) { a=i; } } } } while(a!=-1) { list.add(nums[a]); a=index[a]; } return list; }
转载地址:http://romq.baihongyu.com/