不能修改原陣列,因此重複元素不一定相鄰;
同一層中可選的值必須是當前層中首次出現(因此需要用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 給定陣列中可能包含重複數字,相...