精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

遞增子序列,有點難度!

開發 前端
本題題解清一色都說是深度優先搜索,但我更傾向于說它用回溯法,而且本題我也是完全使用回溯法的邏輯來分析的。

[[427757]]

給定一個整型數組, 你的任務是找到所有該數組的遞增子序列,遞增子序列的長度至少是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]]

說明:

  • 給定數組的長度不會超過15。
  • 數組中的整數范圍是 [-100,100]。
  • 給定數組中可能包含重復數字,相等的數字應該被視為遞增的一種情況。

思路

這個遞增子序列比較像是取有序的子集。而且本題也要求不能有相同的遞增子序列。

這又是子集,又是去重,是不是不由自主的想起了剛剛講過的90.子集II。

就是因為太像了,更要注意差別所在,要不就掉坑里了!

在90.子集II中我們是通過排序,再加一個標記數組來達到去重的目的。

而本題求自增子序列,是不能對原數組經行排序的,排完序的數組都是自增子序列了。

所以不能使用之前的去重邏輯!

本題給出的示例,還是一個有序數組 [4, 6, 7, 7],這更容易誤導大家按照排序的思路去做了。

為了有鮮明的對比,我用[4, 7, 6, 7]這個數組來舉例,抽象為樹形結構如圖:

遞增子序列1

回溯三部曲

  • 遞歸函數參數

本題求子序列,很明顯一個元素不能重復使用,所以需要startIndex,調整下一層遞歸的起始位置。

代碼如下:

  1. vector<vector<int>> result; 
  2. vector<int> path; 
  3. void backtracking(vector<int>& nums, int startIndex) 
  • 終止條件

本題其實類似求子集問題,也是要遍歷樹形結構找每一個節點,所以和回溯算法:求子集問題!一樣,可以不加終止條件,startIndex每次都會加1,并不會無限遞歸。

但本題收集結果有所不同,題目要求遞增子序列大小至少為2,所以代碼如下:

  1. if (path.size() > 1) { 
  2.     result.push_back(path); 
  3.     // 注意這里不要加return,因為要取樹上的所有節點 
  • 單層搜索邏輯

在圖中可以看出,同一父節點下的同層上使用過的元素就不能在使用了

那么單層搜索代碼如下:

  1. unordered_set<int> uset; // 使用set來對本層元素進行去重 
  2. for (int i = startIndex; i < nums.size(); i++) { 
  3.     if ((!path.empty() && nums[i] < path.back()) 
  4.             || uset.find(nums[i]) != uset.end()) { 
  5.             continue
  6.     } 
  7.     uset.insert(nums[i]); // 記錄這個元素在本層用過了,本層后面不能再用了 
  8.     path.push_back(nums[i]); 
  9.     backtracking(nums, i + 1); 
  10.     path.pop_back(); 

對于已經習慣寫回溯的同學,看到遞歸函數上面的uset.insert(nums[i]);,下面卻沒有對應的pop之類的操作,應該很不習慣吧,哈哈

這也是需要注意的點,unordered_set uset; 是記錄本層元素是否重復使用,新的一層uset都會重新定義(清空),所以要知道uset只負責本層!

最后整體C++代碼如下:

  1. // 版本一 
  2. class Solution { 
  3. private: 
  4.     vector<vector<int>> result; 
  5.     vector<int> path; 
  6.     void backtracking(vector<int>& nums, int startIndex) { 
  7.         if (path.size() > 1) { 
  8.             result.push_back(path); 
  9.             // 注意這里不要加return,要取樹上的節點 
  10.         } 
  11.         unordered_set<int> uset; // 使用set對本層元素進行去重 
  12.         for (int i = startIndex; i < nums.size(); i++) { 
  13.             if ((!path.empty() && nums[i] < path.back()) 
  14.                     || uset.find(nums[i]) != uset.end()) { 
  15.                     continue
  16.             } 
  17.             uset.insert(nums[i]); // 記錄這個元素在本層用過了,本層后面不能再用了 
  18.             path.push_back(nums[i]); 
  19.             backtracking(nums, i + 1); 
  20.             path.pop_back(); 
  21.         } 
  22.     } 
  23. public
  24.     vector<vector<int>> findSubsequences(vector<int>& nums) { 
  25.         result.clear(); 
  26.         path.clear(); 
  27.         backtracking(nums, 0); 
  28.         return result; 
  29.     } 
  30. }; 

優化

以上代碼用我用了unordered_set來記錄本層元素是否重復使用。

其實用數組來做哈希,效率就高了很多。

注意題目中說了,數值范圍[-100,100],所以完全可以用數組來做哈希。

程序運行的時候對unordered_set 頻繁的insert,unordered_set需要做哈希映射(也就是把key通過hash function映射為唯一的哈希值)相對費時間,而且每次重新定義set,insert的時候其底層的符號表也要做相應的擴充,也是費事的。

那么優化后的代碼如下:

  1. // 版本二 
  2. class Solution { 
  3. private: 
  4.     vector<vector<int>> result; 
  5.     vector<int> path; 
  6.     void backtracking(vector<int>& nums, int startIndex) { 
  7.         if (path.size() > 1) { 
  8.             result.push_back(path); 
  9.         } 
  10.         int used[201] = {0}; // 這里使用數組來進行去重操作,題目說數值范圍[-100, 100] 
  11.         for (int i = startIndex; i < nums.size(); i++) { 
  12.             if ((!path.empty() && nums[i] < path.back()) 
  13.                     || used[nums[i] + 100] == 1) { 
  14.                     continue
  15.             } 
  16.             used[nums[i] + 100] = 1; // 記錄這個元素在本層用過了,本層后面不能再用了 
  17.             path.push_back(nums[i]); 
  18.             backtracking(nums, i + 1); 
  19.             path.pop_back(); 
  20.         } 
  21.     } 
  22. public
  23.     vector<vector<int>> findSubsequences(vector<int>& nums) { 
  24.         result.clear(); 
  25.         path.clear(); 
  26.         backtracking(nums, 0); 
  27.         return result; 
  28.     } 
  29. }; 

這份代碼在leetcode上提交,要比版本一耗時要好的多。

所以正如在哈希表:總結篇!(每逢總結必經典)中說的那樣,數組,set,map都可以做哈希表,而且數組干的活,map和set都能干,但如果數值范圍小的話能用數組盡量用數組。

總結

本題題解清一色都說是深度優先搜索,但我更傾向于說它用回溯法,而且本題我也是完全使用回溯法的邏輯來分析的。

相信大家在本題中處處都能看到是90.子集II的身影,但處處又都是陷阱。

對于養成思維定式或者套模板套嗨了的同學,這道題起到了很好的警醒作用。更重要的是拓展了大家的思路!

就醬,如果感覺「代碼隨想錄」很干貨,就幫Carl宣傳一波吧!

本文轉載自微信公眾號「代碼隨想錄」,可以通過以下二維碼關注。轉載本文請聯系代碼隨想錄公眾號。

 

責任編輯:武曉燕 來源: 代碼隨想錄
相關推薦

2018-10-16 10:51:59

AI招聘算法招聘歧視

2023-07-07 08:24:07

css顏色變量

2021-09-01 07:59:44

HTTPweb瀏覽器

2021-03-09 07:37:41

DHCP協議地址

2021-09-16 18:28:02

二叉樹遍歷遞歸

2012-09-10 09:52:15

開源開源項目開源精神

2024-06-13 10:24:28

2015-05-05 13:50:56

小米華為

2011-11-11 11:28:56

云計算

2021-09-27 09:18:30

分割回文串循環

2012-03-19 20:52:55

小米

2021-08-16 15:54:55

算法比特幣加密貨幣

2012-10-23 16:34:44

蘋果iCloud云應用

2024-08-26 09:36:06

2011-09-01 10:10:06

云計算

2022-02-10 20:09:24

Dubbo源碼Provider

2025-09-22 01:00:00

2022-01-31 13:48:52

低代碼開發軟件

2021-03-11 23:42:15

二叉樹數組排序

2017-06-28 15:34:16

JDK模塊化Java9
點贊
收藏

51CTO技術棧公眾號

亚洲精品久久久久久久蜜桃| 国产一卡二卡三卡四卡| 在线中文字幕电影| 91啪九色porn原创视频在线观看| 国产999精品久久久| 中文字幕乱码av| 你懂的在线观看一区二区| 欧美在线free| 国产精彩视频一区二区| 成人网视频在线观看| 福利一区在线观看| 国产精品免费视频久久久| 激情四射综合网| 国内精品久久久久久久久电影网| 日韩一区国产二区欧美三区| 欧美精品色婷婷五月综合| 黄在线免费观看| 2023国产精品| 成人欧美一区二区三区视频| 波多野结衣人妻| 999亚洲国产精| 久久中文字幕国产| 九九热免费在线| 欧美一级全黄| 精品成人一区二区三区四区| 黄色一级片免费的| 欧美亚洲韩国| 天天色综合成人网| 黄色三级中文字幕| 国内外激情在线| 欧美国产日韩亚洲一区| 精品国产一区二区三区日日嗨| 91久久精品无码一区二区| 亚洲综合精品| 97热精品视频官网| 国产小视频在线看| 亚洲综合专区| 丝袜美腿亚洲一区二区| 中文字幕国产专区| 在线看成人短视频| 亚洲精品按摩视频| 中文字幕在线播放视频| 伊人久久大香线蕉av超碰| 欧美一区二区性放荡片| 一级黄色片国产| 久久久久久久性潮| 欧美日韩一二三| 黑人粗进入欧美aaaaa| 欧美大胆成人| 黑人巨大精品欧美一区二区一视频 | 三区视频在线观看| 日韩一区二区三区四区五区| 欧美主播一区二区三区| 黄色三级视频在线| 国产极品久久久久久久久波多结野| 色综合中文字幕| 看欧美ab黄色大片视频免费| 欧美三区四区| 欧美性色黄大片| 日本xxxx黄色| 国产精品一区二区三区四区在线观看| 7777精品伊人久久久大香线蕉最新版| 日本不卡一区二区在线观看| 二区三区精品| 欧美不卡在线视频| 中文字幕人妻一区二区三区| 婷婷成人影院| 国产亚洲精品91在线| 大胸美女被爆操| 国产精品毛片一区二区在线看| 美女av一区二区| 国产无遮挡aaa片爽爽| 99亚洲一区二区| 国产精品va在线播放| 亚洲图片视频小说| 国产美女精品一区二区三区| 国产精品久久久久久久久久久久冷 | 大桥未久在线播放| 欧美日韩视频在线| av网站在线不卡| 欧美精品三级在线| 亚洲精品福利资源站| 中文字幕网站在线观看| 久久久久久久久99精品大| 欧美国产乱视频| 精品国产乱子伦| 精东粉嫩av免费一区二区三区| av成人综合网| 国产三级在线| 一区二区三区四区不卡在线| 日本精品免费在线观看| 亚洲一区av| 精品88久久久久88久久久| 亚洲AV无码成人精品区明星换面| 97偷自拍亚洲综合二区| 性欧美视频videos6一9| 亚洲天堂男人网| 成人一级视频在线观看| 午夜精品福利一区二区| 污污视频在线| 欧美天堂亚洲电影院在线播放| 欧美日韩一区二区区别是什么 | 精品视频一二| 亚洲美女免费精品视频在线观看| 国产一区二区精彩视频| 媚黑女一区二区| 国产91视觉| 日本a级在线| 欧美日韩美女在线| 特黄特色免费视频| 欧美大人香蕉在线| 欧美在线播放视频| 亚洲精品一区二区三区不卡| 国产精品你懂的| 女人和拘做爰正片视频| 视频一区中文字幕精品| 在线激情影院一区| 日韩免费视频一区二区视频在线观看| 精品午夜久久福利影院| 视频一区亚洲| 成人性生交大片免费网站| 日韩欧美在线不卡| 欧美性受xxxx黑人| 久久裸体视频| 久热这里只精品99re8久| 色呦呦在线播放| 欧美浪妇xxxx高跟鞋交| 干b视频在线观看| 日日夜夜精品视频天天综合网| 国产精品精品软件视频| av片在线观看网站| 欧美精品在线观看播放| 蜜桃精品一区二区| 亚洲一区二区三区高清不卡| 国内一区二区三区在线视频| 欧美videosex性极品hd| 日韩一二三区不卡| 免费中文字幕在线| 国产一区二区电影| 欧美日韩一区二区三区电影| 日韩大陆av| 精品国产欧美一区二区三区成人 | 欧美巨大丰满猛性社交| 亚洲成人精品久久久| 免费中文字幕视频| 懂色av一区二区三区免费观看| 黄色影视在线观看| 91蜜桃臀久久一区二区| 欧美精品久久久久久久久久| 精品国产亚洲av麻豆| 亚洲精品视频在线观看网站| 北条麻妃亚洲一区| 欧美日本不卡| 国产乱码精品一区二区三区卡| 国产又色又爽又黄刺激在线视频| 精品国产凹凸成av人导航| 久久机热这里只有精品| 不卡的电视剧免费网站有什么| 日本中文字幕在线视频观看| 大桥未久女教师av一区二区| 91国产精品视频在线| 亚洲日本国产精品| 91福利资源站| 久久久99999| 国产精品一区不卡| 日本免费不卡一区二区| 精品国产一区二区三区香蕉沈先生| 国产成人精品免高潮在线观看| 国产福利小视频在线| 欧美久久久久中文字幕| 欧美成人精品欧美一级私黄| 暴力调教一区二区三区| 日本久久久精品视频| 精品国精品国产自在久国产应用| 国产日韩欧美黄色| 色yeye免费人成网站在线观看| 亚洲国产精品va在线看黑人| 国产亚洲欧美日韩高清| 亚洲少妇30p| 高清中文字幕mv的电影| 日本不卡一区二区三区 | 黄色在线论坛| 亚洲成人精品久久久| 无码人妻久久一区二区三区| 最新久久zyz资源站| 人妻互换一二三区激情视频| 久久九九精品| 免费看黄色a级片| 神马午夜久久| 亚洲一区久久久| 樱花草涩涩www在线播放| 中文字幕一区二区三区电影| 丰满人妻一区二区三区无码av| 日韩欧美黄色动漫| 亚洲最大的黄色网址| 2023国产精品| 老司机av网站| 免费高清在线视频一区·| 日韩激情视频一区二区| 欧美日韩国产一区二区三区不卡| 亚洲专区国产精品| 2019年精品视频自拍| 韩国一区二区电影| 国产在线激情视频| 精品亚洲va在线va天堂资源站| 国产精品老熟女视频一区二区| 午夜不卡av免费| 极品魔鬼身材女神啪啪精品| 2017欧美狠狠色| 国产精品成人免费一区久久羞羞| 久久精品国产免费看久久精品| 黄色一级在线视频| 女人香蕉久久**毛片精品| 日韩欧美亚洲在线| 精品人人人人| 豆国产97在线| 高清一区二区| 国产精品网红直播| 精品3atv在线视频| 8090成年在线看片午夜| 青青青国内视频在线观看软件| 日韩亚洲精品视频| 国产视频三级在线观看播放| 日韩国产欧美精品在线| 亚洲精品一区二区三区区别| 9191成人精品久久| 又骚又黄的视频| 色婷婷综合激情| 一级片在线观看免费| 五月婷婷色综合| 国产精选第一页| 亚洲一区二区三区自拍| 国产一二三四区| 亚洲啪啪综合av一区二区三区| 影音先锋男人在线| 国产三级欧美三级日产三级99| 成人免费看aa片| 91色|porny| 男人操女人动态图| 国产亚洲一本大道中文在线| 亚洲一区二区观看| 久久综合狠狠综合久久激情| 亚洲综合自拍网| 99国产精品视频免费观看| 久久久老熟女一区二区三区91| 国产精品77777| 中文字幕乱视频| 91免费观看视频在线| 少妇户外露出[11p]| 99久久精品99国产精品| 国产熟女高潮一区二区三区| 91亚洲资源网| 先锋影音av在线| 中文字幕一区二区三区av| 波兰性xxxxx极品hd| 亚洲激情自拍偷拍| 国产一级在线观看视频| 精品女同一区二区三区在线播放| 999这里只有精品| 色哟哟欧美精品| 日批视频免费观看| 5566中文字幕一区二区电影| 国产哺乳奶水91在线播放| 精品乱人伦小说| 九色视频在线观看免费播放| 最近2019中文免费高清视频观看www99| 最近高清中文在线字幕在线观看| 久久久91精品| 不卡一本毛片| 国产成人jvid在线播放| 四虎国产精品永久在线国在线| 7777精品久久久大香线蕉小说| 中文字幕日韩在线| 欧美日韩在线高清| 我不卡伦不卡影院| 成人免费观看在线| 日韩高清欧美激情| 交换做爰国语对白| 久久久精品人体av艺术| 婷婷社区五月天| 亚洲777理论| 最近中文字幕在线免费观看| 欧美一级高清片| 婷婷五月综合久久中文字幕| 国产一区二区av| 污视频在线看网站| 国产91热爆ts人妖在线| 我要色综合中文字幕| 蜜桃传媒视频麻豆第一区免费观看 | 91小视频在线免费看| 欧美黄色高清视频| 亚洲一区二区三区在线播放| 一级黄色在线观看| 亚洲成色777777在线观看影院| 国产精品视频一区二区久久| 欧美成人中文字幕| 日韩在线短视频| 国产精品一区二区三区观看| 成人在线国产| heyzo国产| 国产精品小仙女| 国精产品一区二区三区| 亚洲图片欧美色图| 一区二区三区精| 亚洲欧洲高清在线| 成人av影院在线观看| 国产精品自产拍在线观看中文| 视频福利一区| 真人抽搐一进一出视频| 久久99精品久久久久婷婷| 亚洲 欧美 日韩在线| 亚洲天堂久久久久久久| 黄色片视频免费| 亚洲精品mp4| 美女精品导航| 亚洲精品免费一区二区三区| 国产乱码精品一区二区三区四区| 妞干网视频在线观看| 精品一区二区三区视频在线观看| 三级网站在线免费观看| 婷婷激情综合网| 亚洲黄色在线免费观看| 久久久精品免费| 日韩精品一页| 亚洲乱码一区二区三区| 久久久亚洲人| 免费黄色在线视频| 激情亚洲一区二区三区四区| 亚洲成人黄色片| 欧美成人亚洲成人日韩成人| 伊人亚洲精品| 在线视频一区观看| 奇米888四色在线精品| 无码人妻aⅴ一区二区三区69岛| 婷婷夜色潮精品综合在线| 风流少妇一区二区三区91| 欧美精品免费在线观看| 玖玖精品一区| 亚洲精品国产suv一区88| 国产一区欧美日韩| 国产av无码专区亚洲av毛网站| 7777精品伊人久久久大香线蕉| 在线观看麻豆| 成人做爽爽免费视频| 影音先锋日韩精品| 亚洲精品乱码久久久久久动漫| 亚洲视频精选在线| 性中国古装videossex| 欧美高清视频在线| 欧美美女在线直播| 国产亚洲综合视频| 久久综合99re88久久爱| 男人天堂视频在线| 最好看的2019的中文字幕视频| 欧美日韩卡一| 性欧美18一19内谢| 国产河南妇女毛片精品久久久| 国产亚洲第一页| 亚洲国产精品字幕| 国产精品极品美女在线观看| 水蜜桃一区二区三区| 蜜桃av一区二区| 日韩视频中文字幕在线观看| 欧美一区二区精品久久911| 污污影院在线观看| 久久久久成人精品免费播放动漫| 久久久噜噜噜久久狠狠50岁| 国产在线综合视频| 4438x成人网最大色成网站| 亚洲奶水xxxx哺乳期| 九色一区二区| 日韩高清电影一区| 国产免费无码一区二区视频 | 国产一级免费在线观看| 国产精品自产拍在线观看中文| 欧美精品国产一区二区| 久久国产精品无码一级毛片| 在线一区二区三区四区五区 | 国产精品视频地址| 午夜激情一区| 最新中文字幕视频| 欧美日韩美女一区二区| 国产三级伦理在线| 日韩一二三区不卡在线视频| 国产a精品视频| 无码人妻丰满熟妇精品| 美女少妇精品视频| 国产麻豆一区二区三区精品视频| 午夜剧场在线免费观看| 欧美日韩免费在线观看| bestiality新另类大全| 久久青青草原| 国产一区二三区| 国产精品久久久久久人| 欧美日本高清一区| 欧美日韩国产免费观看视频| 亚洲精品乱码久久久久久蜜桃图片| 欧美调教femdomvk| 水蜜桃在线视频| 国产精品视频一二三四区|