491 遞增子串行

2021-10-11 20:52:51 字數 955 閱讀 5273

不能修改原陣列,因此重複元素不一定相鄰;

同一層中可選的值必須是當前層中首次出現(因此需要用unordered_set記錄當前層使用過的值,注意到本題的值區間尾[-100,100]),因此可以優化為長度為201的layer陣列,將值+100對映到layer陣列上;

遞增子列長度至少為2;

遞增:要選的值》=path的尾元素(注意選擇首個元素時path為空,可以直接加入path)

};若可以對陣列排序,那麼重複元素是相鄰的,方便樹層去重,類似於子集ⅱ;若不能排序,即無法保證重複元素相鄰,因此若想樹層去重只能使用標記陣列;

要想清楚哪些需要回溯,哪些不能回溯

class

solution}if

(flag)

continue

; path.

push_back

(nums[i]);

//used[nums[i] + 100] = true;

backtracking

(nums, i +1)

; path.

pop_back()

;}}public

: vector

int>>

findsubsequences

(vector<

int>

& nums)

};

leetcode491 遞增子串行

這一題使用dfs回溯法,我們先來分析一下這種方法的時間複雜度 如圖。由於我們知道陣列的長度不超過15,所以這顆樹最壞的情況的啊hi見複雜度為2 15,也就是幾十萬的計算量,是可以接收的。那麼我們根據思路寫出演算法 class solution public void dfs set ans,list...

leetCode 491 遞增子串行

給定乙個整型陣列,你的任務是找到所有該陣列的遞增子串行,遞增子串行的長度至少是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 給定陣列中可能包含重複數字,相...

leetcode 491 遞增子串行

給定乙個整型陣列,你的任務是找到所有該陣列的遞增子串行,遞增子串行的長度至少是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 給定陣列中可能包含重複數字,相...