Этот код использует алгоритм поиска в глубину (dfs), чтобы найти все различные возможные неубывающие подпоследовательности данного массива. Функция dfs начинает с проверки, содержит ли текущая подпоследовательность хотя бы два элемента, и, если да, добавляет ее к результатам. Затем он использует unordered_set для отслеживания элементов, которые использовались в текущей подпоследовательности, и использует цикл for для перебора оставшихся элементов в массиве. Если текущий элемент больше или равен последнему элементу в текущей подпоследовательности, он добавляет элемент в подпоследовательность и рекурсивно вызывает функцию dfs с обновленной подпоследовательностью и начальным индексом. После возврата функция dfs удаляет последний элемент из текущей подпоследовательности.

vector<vector<int>> findSubsequences(vector<int>& nums) {
    vector<vector<int>> res;
    vector<int> cur;
    dfs(nums, 0, cur, res);
    return res;
}
void dfs(vector<int>& nums, int start, vector<int>& cur, vector<vector<int>>& res) 
   {
    if (cur.size() >= 2) res.push_back(cur);
    unordered_set<int> used;
    for (int i = start; i < nums.size(); i++) {
        if (used.count(nums[i])) continue;
        if (cur.empty() || nums[i] >= cur.back()) {
            used.insert(nums[i]);
            cur.push_back(nums[i]);
            dfs(nums, i + 1, cur, res);
            cur.pop_back();
        }
    }
}

Причина этого в том, что для каждого элемента входного массива мы можем либо включать его в текущую подпоследовательность, либо не включать. Это означает, что для массива размера n у нас есть 2^n возможных подпоследовательностей. Затем для каждой из этих возможных подпоследовательностей нам нужно проверить, является ли она неубывающей и имеет ли хотя бы два элемента, что занимает O(n) времени. Следовательно, общая временная сложность составляет O (2 ^ n * n).

Объемная сложность этого решения равна O(n), где n — длина входного массива. Причина этого в том, что мы используем рекурсивный подход для поиска всех возможных подпоследовательностей, который имеет пространственную сложность O(n) из-за стека вызовов. Дополнительное пространство используется из-за вектора, unordered_set и массива, используемых в решении. Это тоже O(n).