|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 给出一个由无重复的正整数组成的集合,找出其中最大的整除子集,子集中任意一对 (Si,Sj) 都要满足:Si % Sj = 0 或 Sj % Si = 0。
- 如果有多个目标子集,返回其中任何一个均可。
-
- 示例 1:
- 输入: [1,2,3]
- 输出: [1,2] (当然, [1,3] 也正确)
- 示例 2:
- 输入: [1,2,4,8]
- 输出: [1,2,4,8]
复制代码
- vector<int> largestDivisibleSubset(vector<int>& nums) {
- vector<int> res;
- int len = nums.size();
- if(len == 0 )return res;
- sort(nums.begin(), nums.end());
- vector<int> dp(len, 0);
- dp[0] = 1;
- for(int i = 1; i < len ; i++){
- for(int j = i-1; j>=0; j--){
- if(nums[i] % nums[j] == 0){
- dp[i] = max(dp[i], dp[j]+1);
- }
- }
- if(dp[i] == 0) dp[i] = 1;
- }//dp记录以nums[i]结尾的最大长度
- int max_len = *max_element(dp.begin(), dp.end());
- int k = dp.size()-1;
- while(k >=0){
- if(max_len == 0)break;
- if(dp[k] == max_len){
- if(res.empty() || res.back()%nums[k] == 0){
- res.push_back(nums[k]);
- max_len--;
- }
-
- }
- k--;
- }//根据dp返回结果
- return res;
- }
复制代码 |
|