麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

368. Largest Divisible Subset -Medium

2019-11-11 07:34:29
字體:
來源:轉載
供稿:網友

Question

Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of elements in this subset satisfies: Si % Sj = 0 or Sj % Si = 0.

If there are multiple solutions, return any subset is fine.

給出一個不重復的正整數集合,找出滿足 Si % Sj = 0 或者 Sj % Si = 0 的最長可整除子序列。如果有多個解,只需返回任意一個即可

Example

nums: [1,2,3]

Result: [1,2] (of course, [1,3] will also be ok)


nums: [1,2,4,8]

Result: [1,2,4,8]

Solution

動態規劃解。這道題和LIS非常相似,LIS的要求是遞增,而最長可正整除序列的要求則是可整除。所以只要我們先將列表排序,這樣只需判斷 Si % Sj = 0 (i > j),再接下來就和LIS完全一樣了(和我上一篇差不多就不寫了)。不過這里需要輸出一種結果。所以我們還需要額外保存每個元素的上一個元素索引。

class Solution(object): def largestDivisibleSubset(self, nums): """ :type nums: List[int] :rtype: List[int] """ if len(nums) == 0: return [] # 先排序保證只需要相除一次 nums.sort() dp = [1] * len(nums) dp_index = [-1] * len(nums) # 保存元素的上一個元素的索引,用于得到序列 max_len = 1 # 維護一個最長子序列的長度 for index_n, n in enumerate(nums): for i in range(index_n): if n % nums[i] == 0 and dp[i] + 1 > dp[index_n]: dp[index_n] = dp[i] + 1 dp_index[index_n] = i # 每次更新dp時同時保存其上一個元素的索引 max_len = max(dp[i] + 1, max_len) result = [] # 定位到第一個最長子序列的結尾 index = dp.index(max_len) # 根據dp_index反向保存最長子序列 while index != -1: result.append(nums[index]) index = dp_index[index] # 得到上一個元素的索引 result.reverse() # 倒序 return result
上一篇:LEETCODE--Longest Palindrome

下一篇:Mybatis

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久蜜桃香蕉精品一区二区三区 | 91精品国产91久久久久久丝袜 | 久久亚洲精品11p | 精品一区二区久久久久久久网精 | 欧美日本综合 | 亚洲精品a级 | 激情久久精品 | 国产一区网址 | 久久综合久久综合久久综合 | 黄色影院网站 | 日本网站一区二区三区 | 国产亚洲精品久久午夜玫瑰园 | 精品久久久久久综合日本 | 国产乱淫a∨片免费观看 | 成人综合在线观看 | 激情大乳女做爰办公室韩国 | 国产午夜精品一区二区三区免费 | 国产一级一区 | 中文字幕在线观看网址 | av电影网在线观看 | 亚洲男人的天堂在线视频 | 久久撸视频 | 国产精品久久久久永久免费 | 一级在线观看视频 | 一区二区三区四区视频在线观看 | 毛片视频免费观看 | 欧美精品18 | 国产精品999在线观看 | 最近中文字幕一区二区 | 中国hdxxxx护士爽在线观看 | 操嫩草| 欧美大穴 | 成人在线网站 | 在线观看国产免费视频 | xxxx hd videos | 久久精品视频1 | 国产精品一区在线观看 | 免费看真人a一级毛片 | 国产精品久久久久久婷婷天堂 | 91久久夜色精品国产网站 | 免费午夜视频 |