LeetCode 491 - Increasing Subsequences|BIG MEOW



LeetCode 491 - Increasing Subsequences|BIG MEOW

给定一个数组,返回所有可能的非严格增序子集,子集至少有两个元素。数组中有重复元素。

举例:
Input: [4, 6, 7, 7]
Output: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]

思路

动态规划解法。遍历数组 nums 。用一个 map 来存储 已经出现过的值及其上次出现的位置。

nums[i] 的结果集等于之前所有结果集 res[i - 1] 加上 res[i - 1] 中所有 List 加上 nums[i] (如果 nums[i] 大于最后的数)再加上:

  • 若 nums[i] 第一次出现,nums[i] 与 map 中所有 key 的对子。
  • 若 map 中已存在 nums[i] ,遍历上次位置 last 到这次位置 curr,若某个值 nums[j] 首次出现的位置 i 比 last 小,说明这个值在上次 nums[i] 以后才有,应该将 (nums[j], nums[i]) 加入集合 res 。
    最后将 (nums[i], i) 存入 map

本来是用一个 List<List<List<Integer>>> 作为 dp 来做,写完之后发现只要记录一下上一次加的最后一个就好了。

用 List 超时了,应该是中间判断的时间花了太久,干脆先用 set 存,最后转到 List 里,过了。以为考的就是重复时候的条件,辣鸡。


Read full article from LeetCode 491 - Increasing Subsequences|BIG MEOW


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts