给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是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]。
给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。
又是找工作的一天
这道题
看了解析才会做,主要是两点,深搜+集合去重
长度不超过15,所以用深搜15! 复杂度可以
深搜的原理,就是拿到一个数,看他后面每一个数,如果大,就与前面的连到,继续搜后面
如果小,就作为开头,去判断新的子序列
#include <iostream>
#include <vector>
#include <set>
using namespace std;
void dfs(vector<int>& nums, int i, vector<int>& tmp, set< vector<int> >& res){
if(tmp.size() >= 2){
res.insert(tmp);
}
int j;
for(j = i; j < nums.size(); j++){
if(!tmp.empty() && tmp.back() > nums[j]) continue;
tmp.push_back(nums[j]);
dfs(nums, j + 1, tmp, res