在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Given an integer array, your task is to find all the different possible increasing subsequences of the given array, and the length of an increasing subsequence should be at least 2 . Example: 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]] Note:
给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。 示例: 输入: [4, 6, 7, 7] 输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]] 说明:
Runtime: 472 ms
Memory Usage: 17.3 MB
1 class Solution { 2 func findSubsequences(_ nums: [Int]) -> [[Int]] { 3 var res:Set<[Int]> = Set<[Int]>() 4 var cur:[[Int]] = [[]] 5 for i in 0..<nums.count 6 { 7 var n:Int = cur.count 8 for j in 0..<n 9 { 10 if !cur[j].isEmpty && cur[j].last! > nums[i] 11 { 12 continue 13 } 14 cur.append(cur[j]) 15 cur[cur.count - 1].append(nums[i]) 16 if cur[cur.count - 1].count >= 2 17 { 18 res.insert(cur.last!) 19 } 20 } 21 } 22 return [[Int]](res) 23 } 24 } 15810 kb1 class Solution { 2 func findSubsequences(_ nums: [Int]) -> [[Int]] { 3 guard nums.count > 0 else { return [[Int]]() } 4 5 var visit = [Bool](repeating: false, count: nums.count) 6 var res = [[Int]]() 7 8 dfs(nums, 0, &res, &visit, getPrev(nums), [Int]()) 9 10 return res 11 } 12 13 private func dfs(_ nums: [Int], _ index: Int, _ res: inout [[Int]], _ visit: inout [Bool], _ prev: [Int], _ list: [Int]) { 14 if list.count > 1 { 15 res.append(list) 16 } 17 18 var list = list 19 20 for i in index..<nums.count { 21 if index >= 1, nums[i] < nums[index-1] { 22 continue 23 } 24 25 if prev[i] != -1, visit[prev[i]] == false, (list.count == 0 || prev[i] > index-1) { 26 continue 27 } 28 29 list.append(nums[i]) 30 visit[i] = true 31 dfs(nums, i+1, &res, &visit, prev, list) 32 visit[i] = false 33 list.removeLast() 34 } 35 } 36 37 private func getPrev(_ nums: [Int]) -> [Int] { 38 var map = [Int: Int]() 39 var prev = [Int](repeating: -1, count: nums.count) 40 41 for i in 0..<nums.count { 42 if let value = map[nums[i]] { 43 prev[i] = value 44 } 45 map[nums[i]] = i 46 } 47 48 return prev 49 } 50 }
|
请发表评论