368. 最大整除子集
先對陣列排序,然後就很像最長上公升子串行了,dp[i]就表示以nums[i]結尾的最大整除子集。
轉移方程:dp[i] = max (0 <= j < i 且 a[j]%a[i] == 0)
初始化:dp[i] = 1 (0 <= i < nums.length),另設路徑陣列path,用來記錄回溯的路線。
目標:max ( 0 <= i < = n)
時間複雜度:o(n^2)
空間複雜度:o(n)
class
solution}}
//找出dp最大的下標,作為回溯起始位置
int maxindex =-1
;int max =0;
for(
int i =
0; i < n; i++)}
list
res =
newarraylist
<
>()
;if(maxindex ==-1
)return res;
//回溯路線
res.
add(nums[maxindex]);
while
(path[maxindex]!=-
1)return res;
}}
這個題是否可以像lis那樣優化為o(nlogn)呢?我認為不可以,因為遍歷到的nums[i],並不是只依賴dp,還要看nums[i]是否能整除前面的每乙個元素。
如果所說有誤,還請指正,附上lis的優化版本
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 然後可...