最大整除子集

2022-05-07 11:15:11 字數 916 閱讀 5020

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 (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]

這道題和找最長子序列有點像!

排序動態規劃找到最長的整除子集,但是要記錄前乙個數字置

舉個例子 [1,2,3]

我們用dp[i]記錄到i最長的整除子集長度,用pre[i]記錄到i前面乙個數的位置

很明顯dp[0] = 1 ,pre[0] = -1

當i = 1,有nums[1] % nums[0] == 0可以整除,如果dp[0] + 1 > dp[1],那麼pre[1] = 0,dp[1] = 2

當i = 2,也有有nums[2] % nums[0] == 0可以整除,那麼我們判斷i=2之前可以整除的,有nums[2] % nums[1] != 0,所以有nums[2] % nums[0] == 0能整除,有dp[0] + 1 > dp[2],

那麼pre[2] = 0,dp[1] = 2

接下來我們就取dp最大值,即最長的整除子集長度,再根據記錄的前面數的位置找出所有的數字

public listlargestdivisiblesubset(int

nums)

}if (dp[i] >m)

}list

res = new arraylist<>();

for (int i = 0; i < m; i++)

return

res;

}}

368 最大整除子集

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 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 思路 ...

368 最大整除子集

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 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 自己寫...

LeetCode368 最大整除子集

給出乙個由無重複的正整數組成的集合,找出其中最大的整除子集,子集中任意一對 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 然後可...