精華區beta Marginalman 關於我們 聯絡資訊
※ 引述 《Rushia (みけねこ的鼻屎)》 之銘言: :   : https://leetcode.com/problems/largest-divisible-subset/description : 368. Largest Divisible Subset : 給你一個陣列nums,找出由他的元素組成的最大子集合,所有元素滿足 : nums[i] % nums[j] == 0 or nums[j] % nums[i] == 0,如果有多個解返回任意一個。 我的解法是n^2 先sort一下 用陣列的陣列當dp的東西 每次都會回頭找能夠整除的元素 然後找到擁有最長的陣列的元素 加上去 對每個元素做同樣的事 接著再找最長的那個就是答案了 其實好像可以邊找邊做 這題有更快的解法嗎 像是利用lis最長子字串的方法做 但是因為他是看能不能整除 所以好像不太可以? 姆咪 ```cpp class Solution { public: vector<int> largestDivisibleSubset(vector<int>& nums) { sort(nums.begin() , nums.end() , less()); int len = nums.size(); vector<int> res ; vector<vector<int>> cnt(len , vector<int>()); for(int i = 0 ; i < len ; i ++) { int icnt = 1; int ij = 0; for(int j = i-1 ; j >= 0 ; j --) { if((nums[i] % nums[j] == 0)||(nums[j] % nums[i] == 0)) { if(cnt[j].size()+1 > cnt[i].size()) { cnt[i] = cnt[j]; } } } cnt[i].push_back(nums[i]); } for(int i = 0 ; i < len ; i ++) { if(cnt[i].size() > res.size()) { res = cnt[i]; } } return res; } }; ``` -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.216.41.234 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1707460697.A.646.html
JIWP: 你好爛 02/09 14:46
wu10200512: n^2爛吐了 過年停止內捲 02/09 14:51
oin1104: 可是n^2 贏70幾趴欸 這題還有其他解法嗎 02/09 14:57
JIWP: 爛透了 02/09 14:58
DJYOSHITAKA: 單純記下回頭找到能整除寫最長陣列的index,這樣可以 02/09 15:01
DJYOSHITAKA: 不用記整條 02/09 15:01
DJYOSHITAKA: *整除且最長 02/09 15:02
oin1104: 好像也不錯 02/09 15:06