【練習】【類似于子集問題】力扣491. 非遞減子序列/遞增子序列

題目

  1. 非遞減子序列

給你一個整數數組 nums ,找出并返回所有該數組中不同的遞增子序列,遞增子序列中 至少有兩個元素 。你可以按 任意順序 返回答案。

數組中可能含有重復元素,如出現兩個整數相等,也可以視作遞增序列的一種特殊情況。

示例 1:

輸入:nums = [4,6,7,7]

輸出:[[4,6],[4,6,7],[4,6,7,7],[4,7],[4,7,7],[6,7],[6,7,7],[7,7]]

示例 2:

輸入:nums = [4,4,3,2,1]

輸出:[[4,4]]

來源:力扣491. 非遞減子序列


思路(注意事項)

  1. 用數組記錄同一層是否有重復的元素
  • !path.empty()才可以保證有path.back()
  • 至于為什么回溯的時候沒有將標記重置回0,是因為要求同一層不能有重復的元素,如果重置0,則后續元素判斷時,會忘記之前是否有與其相等的元素。
  1. 用哈希表記錄同一層是否有重復的元素

純代碼1

class Solution {
private:vector<vector<int>> ans;vector<int> path;void backtracking (vector<int>& nums, int start){if (path.size() >= 2) ans.push_back(path);vector<int> tmp(201, 0); // [-100,100]for (int i = start; i < nums.size(); i ++){if (!path.empty() && nums[i] < path.back() || tmp[100 + nums[i]] == 1) continue;tmp[100 + nums[i]] = 1;path.push_back(nums[i]);backtracking(nums, i + 1);path.pop_back();}}
public:vector<vector<int>> findSubsequences(vector<int>& nums) {backtracking (nums, 0);return ans;}
};

題解1(加注釋)

class Solution {
private:vector<vector<int>> ans;  // 存儲所有符合條件的子序列vector<int> path;         // 存儲當前遞歸路徑中的子序列// 回溯函數,用于生成所有非遞減子序列void backtracking(vector<int>& nums, int start) {// 如果當前路徑中的子序列長度大于等于 2,將其加入結果if (path.size() >= 2) ans.push_back(path);// 使用臨時數組 tmp 去重,確保同一層級中不會重復選擇相同的元素vector<int> tmp(201, 0);  // 數組大小為 201,覆蓋范圍 [-100, 100]// 遍歷數組,從 start 開始for (int i = start; i < nums.size(); i++) {// 如果 path 不為空且當前元素小于 path 的最后一個元素,跳過(確保子序列非遞減)// 或者當前元素已經在本層級使用過,跳過(去重)if (!path.empty() && nums[i] < path.back() || tmp[100 + nums[i]] == 1) continue;// 標記當前元素為已使用tmp[100 + nums[i]] = 1;// 將當前元素加入路徑path.push_back(nums[i]);// 遞歸調用,處理下一個元素backtracking(nums, i + 1);// 回溯:移除當前元素,嘗試其他可能性path.pop_back();}}public:// 主函數,生成所有非遞減子序列vector<vector<int>> findSubsequences(vector<int>& nums) {// 從索引 0 開始回溯backtracking(nums, 0);// 返回所有符合條件的子序列return ans;}
};

純代碼2

class Solution {
private:vector<vector<int>> ans;vector<int> path;void backtracking (vector<int>& nums, int start){if (path.size() >= 2) ans.push_back(path);unordered_set<int> st;for (int i = start; i < nums.size(); i ++){if (!path.empty() && nums[i] < path.back() || st.find (nums[i]) != st.end()) continue;st.insert (nums[i]);path.push_back(nums[i]);backtracking(nums, i + 1);path.pop_back();}}
public:vector<vector<int>> findSubsequences(vector<int>& nums) {backtracking (nums, 0);return ans;}
};

題解2(加注釋)

class Solution {
private:vector<vector<int>> ans;  // 存儲所有符合條件的子序列vector<int> path;         // 存儲當前遞歸路徑中的子序列// 回溯函數,用于生成所有非遞減子序列void backtracking(vector<int>& nums, int start) {// 如果當前路徑中的子序列長度大于等于 2,將其加入結果if (path.size() >= 2) ans.push_back(path);// 使用哈希集合 st 去重,確保同一層級中不會重復選擇相同的元素unordered_set<int> st;// 遍歷數組,從 start 開始for (int i = start; i < nums.size(); i++) {// 如果 path 不為空且當前元素小于 path 的最后一個元素,跳過(確保子序列非遞減)// 或者當前元素已經在本層級使用過,跳過(去重)if (!path.empty() && nums[i] < path.back() || st.find(nums[i]) != st.end()) continue;// 將當前元素加入哈希集合,標記為已使用st.insert(nums[i]);// 將當前元素加入路徑path.push_back(nums[i]);// 遞歸調用,處理下一個元素backtracking(nums, i + 1);// 回溯:移除當前元素,嘗試其他可能性path.pop_back();}}public:// 主函數,生成所有非遞減子序列vector<vector<int>> findSubsequences(vector<int>& nums) {// 從索引 0 開始回溯backtracking(nums, 0);// 返回所有符合條件的子序列return ans;}
};

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/896203.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/896203.shtml
英文地址,請注明出處:http://en.pswp.cn/news/896203.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

本地部署AI模型 --- DeepSeek(二)---更新中

目錄 FAQ 1.Failed to load the model Exit code: 18446744072635812000 FAQ 1.Failed to load the model Exit code: 18446744072635812000 問題描述&#xff1a; &#x1f972; Failed to load the model Error loading model. (Exit code: 18446744072635812000). Unkn…

開源嵌入式實時操作系統uC/OS-II介紹

一、uC/OS-II的誕生&#xff1a;從開源實驗到行業標桿 背景與起源 uC/OS-II&#xff08;Micro-Controller Operating System Version II&#xff09;誕生于1992年&#xff0c;由嵌入式系統先驅Jean J. Labrosse開發。其前身uC/OS&#xff08;1991年&#xff09;最初作為教學工…

Starlink衛星動力學系統仿真建模第七講-衛星姿軌控系統(Attitude and Orbit Control System, AOCS)設計規范

以下是一份衛星姿軌控系統&#xff08;Attitude and Orbit Control System, AOCS&#xff09;設計規范的框架和核心內容示例&#xff0c;供參考&#xff1a; 衛星姿軌控系統&#xff08;AOCS&#xff09;設計規范 1. 總則 1.1 目的 本規范旨在規定衛星姿軌控系統的設計要求、…

C++之旅-C++11的深度剖析(1)

目錄 前言/背景 1.C11的發展歷史 2.列表初始化 2.1 C98傳統的{} 2.2 C11中的{} 2.3 C11中的std::initializer_list 3.右值引用 3.1 左值和右值 3.2 左值引用和右值引用 3.3 引用延長生命周期 3.4 左值和右值的參數匹配 結束語 前言/背景 隨著現代軟件開發的快速發展…

什么是手機9008模式?如何進入9008

之前給大家分享了一些有關手機刷機的知識&#xff0c;今天給大家講一講如果刷機過程中不慎變磚應該如何應對&#xff08;當然了&#xff0c;希望大家都不會遇到&#xff09;&#x1f602;&#x1f604; 在給手機 Root 或刷機時&#xff0c;線刷 9008 指的是利用 高通 9008 模式…

單機上使用docker搭建minio集群

單機上使用docker搭建minio集群 1.集群安裝1.1前提條件1.2步驟指南1.2.1安裝 Docker 和 Docker Compose&#xff08;如果尚未安裝&#xff09;1.2.2編寫docker-compose文件1.2.3啟動1.2.4訪問 2.使用2.1 mc客戶端安裝2.2創建一個連接2.3簡單使用下 這里在ubuntu上單機安裝一個m…

怎么在Github上readme文件里面怎么插入圖片?

環境&#xff1a; Github 問題描述&#xff1a; 怎么在Github上readme文件里面怎么插入圖片&#xff1f; https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解決方案&#xff1a; 1.相對路徑引用 上傳圖片到倉庫 將圖片文件&#xff08;如 .png/.jpg&#xff…

Elasticsearch除了用作查找以外,還能可以做什么?

前言 Elasticsearch用于實時數據分析、日志存儲、業務智能等。還有日志與監控、多租戶和安全性。以及應用場景包括日志分析、公共數據采集、全文搜索、事件數據、數據可視化。處理錯誤拼寫和支持變體&#xff0c;不過這些可能還是屬于搜索優化。企業搜索、日志管理、應用監控、…

AIGC(生成式AI)試用 22 -- 跟著清華教程學習 - DeepSeek:從入門到精通

目標&#xff1a; 跟著清華教程學習DeepSeek同樣的問題分別嘗試使用DeepSeek和文心一言進行提問嘗試使用輔助工具完成學習中遇到的問題 個人理解&#xff1a; - AI&#xff0c;AI思維&#xff0c;像人一樣思考&#xff0c;越來越像人&#xff1f;參考數據宏大&#xff0c;思考…

[Windows] 全國油價實時查詢,可具體到城市

[Windows] 全國油價實時查詢&#xff0c;可具體到城市 鏈接&#xff1a;https://pan.xunlei.com/s/VOJnS3aOPeBwGaSvS0O0E1hwA1?pwdx83j# 出于代碼練習的目的&#xff0c;調用公共免費api做的py程序&#xff0c;已經一鍵打包&#xff0c;雙擊啟動即可 使用&#xff1a;選擇…

【并發編程】線程池任務拋異常會怎么樣?

一、先說結論 得看線程池的實現&#xff0c;JUC 的線程池&#xff08;ThreadPoolExecutor&#xff09;的話 不會影響其他的線程若是 submit 方法&#xff0c;或者任務為 future 任務&#xff0c;異常只有在 get 的時候才會拋出若是 execute runnable 任務&#xff0c;異常就…

本地部署deepseek-r1 ollama+anythingllm

本期筆者帶給大家部署一個本地私有化知識庫&#xff0c;簡單明了&#xff0c;直接步入主題&#xff0c;需要讀者可以繼續關注支持一下啊&#xff01; 目錄 背景步驟 一、環境準備二、Ollama環境部署三、AnythingLLM安裝 總結 開始下載應用&#xff1a; 操作系統&#xff1a…

JAVA-Exploit編寫(13-15)--JAVAFX-GUI檢測工具編寫實現

目錄 一,JAVAFX-GUI單個漏洞檢測編寫 1.1 綁定事件 1.2 Thinkphp5_Rce編寫 1.3 編寫利用類 1.4 Thinkphp2x_Rce編寫 1.5 單個漏洞檢測GUI工具完整代碼 二,JAVAFX-GUI單個漏洞批量檢測編寫 2.1 編寫利用反射類 2.2 批量檢測漏洞完整GUI工具代碼 三,JAVAFX-GUI…

mysql-Innodb記錄結構深度解析

Innodb記錄結構 InnoDB記錄結構深度解析一、InnoDB存儲基礎單元&#xff1a;頁&#xff08;Page&#xff09;二、行格式&#xff08;Row Format&#xff09; 三、核心行格式詳解1. Compact行格式結構組成&#xff1a; 2. Redundant行格式&#xff08;兼容舊版本&#xff09;核心…

Deepin(Linux)安裝MySQL指南

1.下載 地址&#xff1a;https://downloads.mysql.com/archives/community/ 2.將文件解壓到 /usr/local 目錄下 先cd到安裝文件所在目錄再解壓&#xff0c;本機是cd /home/lu01/Downloads sudo tar -xvJf mysql-9.2.0-linux-glibc2.28-x86_64.tar.xz -C /usr/local3.創建軟鏈…

ZT9 游游的字母翻倍

描述 游游拿到了一個長度為n的字符串&#xff0c;她每次操作會選擇一個區間[l,r]&#xff0c;將第l個字母到第r個字母各重復一次&#xff0c;插入到該字母的后面。 例如&#xff0c;對于字符串"abcd"&#xff0c;若選擇區間[2,3]進行操作&#xff0c;字符串將變成&qu…

Visual Studio更新說明(關注:.NET+AI生產力)

Ver V0.0&#xff1a;Visual Studio 2022 v17.12更新:.NET9AI生產力 AI插件推薦 &#xff08;1&#xff09;騰訊云AI代碼手&#xff08;內含了DeepSeek-R1&#xff09;&#xff0c;目前免費&#xff0c;但收費我也可能會買。 AI插件!推薦 &#xff08;1&#xff09;百度的…

C++ 設計模式-訪問者模式

C++訪問者模式 一、模式痛點:當if-else成為維護噩夢 開發動物園管理系統,最初的需求很簡單: class Animal {}; class Cat : public Animal {}; class Dog : public Animal {};// 處理動物叫聲 void makeSound(Animal* a) {if (auto c = dynamic_cast<Cat*>(a)) {st…

QEMU源碼全解析 —— 內存虛擬化(17)

接前一篇文章:QEMU源碼全解析 —— 內存虛擬化(16) 本文內容參考: 《趣談Linux操作系統》 —— 劉超,極客時間 《QEMU/KVM源碼解析與應用》 —— 李強,機械工業出版社 QEMU內存管理模型

java基于數組實現隊列(四)

概述 實現我上一篇博客中提到的 實際上&#xff0c;就是用synchronized代碼塊解決線程安全問題&#xff0c;以及利用wait()、notify()實現線程阻塞、喚醒。 實現 pollV3() private Object lockBySynchronizednew Object();public int pollV3() {synchronized (lockBySynchr…