368 最大整除子集(類似LIS)

2021-10-02 22:09:55 字數 782 閱讀 3931

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 然後可...