Largest_Divisible_Subset
来源:互联网 发布:教务系统数据库表 编辑:程序博客网 时间:2024/06/06 11:03
题目描述:
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.
Example 1:
nums: [1,2,3]
Result: [1,2] (of course, [1,3] will also be ok)
Example 2:
nums: [1,2,4,8]
Result: [1,2,4,8]
(给定一个不重复正整数集合,寻找最大子集,
使得子集中的任意一对元素 (Si, Sj) 均满足Si % Sj = 0或者Sj % Si = 0。
如果存在多种答案,返回其中之一即可。
测试用例如题目描述。)
思路:确定状态转移方程:dp[i] = max(dp[i], dp[j]+1)
先排序,因为肯定是大的除小的才能没有余数
遍历数组将每一个数与其之前的数相除,如果可以整除一个数那么就一定能整除可以被这个数所整除的所有数
public class Largest_Divisible_Subset {public static List<Integer> largestDivisibleSubset(int[] nums) {List<Integer> result=new ArrayList<Integer>();if(nums == null||nums.length == 0){return result;}Arrays.sort(nums);int max = 0;int maxIndex = 0;int dp[] = new int[nums.length];int index[] = new int[nums.length];//这里要对下标数组赋初值,因为后面对下标追踪时可能会到下标为零的数//如果不赋初值那么在最后一个循环时,追踪到下标为零的数时,i=index[0]=0;此时判断条件是i>=0,会造成死循环for(int i=0;i<index.length;i++){index[i] = -1;}for(int i=1;i<nums.length;i++){for(int j=0;j<i;j++){if(nums[i]%nums[j]==0){//虽然动态方程是dp[i] = max(dp[i], dp[j]+1)//但不可以直接使用,因为这样只能记录每个点之前有多少符合条件的数却无法找到到底是哪些//所以需要用数组追踪就可以//而且只需记录一个数,因为如果可以整除一个数那么就一定能整除可以被这个数所整除的所有数if(dp[i]<dp[j]+1){dp[i] = dp[j]+1;index[i] = j;//这里是为了记录最大子串if(dp[i]>max){max = dp[i];maxIndex = i;}}}}}for(int i=maxIndex;i>=0;i=index[i]){result.add(0,nums[i]);}return result; }public static void main(String[] args) {int nums[] = {2,3,9,12,24};List<Integer> result = largestDivisibleSubset(nums);for(int i=0;i<result.size();i++){System.out.print(result.get(i)+" ");}}}
阅读全文
1 0
- Largest_Divisible_Subset
- 【shiro】shiro和sping整合
- Linux中源码编译lua动态库
- 数据结构-算法和数据操作
- 原始数据类型
- [dubbo入门] dubbo入门
- Largest_Divisible_Subset
- 【C语言】【unix c】使用mmap将物理地址映射到进程的虚拟地址空间
- windwos下怎样配置redis服务器
- 假定CSomething是一个类,执行下面这些语句之后,内存里创建了____个CSomething对象。
- VMware vSphere Web Services SDK编程指南(八)- 8.1 认证和授权(相关对象)
- PAT_A 1041. Be Unique (20)
- 防止表单重复提交的三种方式
- C++面向对象模型初探
- python 经典100例(1-20)