当前位置: 首页 > news >正文

代码随想录第二十九天打卡| 491.递增子序列,46.全排列,47.全排列 II

491.递增子序列

本题和大家刚做过的 90.子集II 非常像,但又很不一样,很容易掉坑里。

代码随想录

视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili

class Solution {
public:vector<vector<int>>res;vector<int>path;void Traversal(vector<int>nums,int startindex){if (path.size()>1)res.push_back(path);unordered_set<int>uset;//只在本层有效for (int i=startindex;i<nums.size();i++){if (uset.find(nums[i])!=uset.end())continue;if (!path.empty() && nums[i]<path.back())continue;uset.insert(nums[i]);path.push_back(nums[i]);Traversal(nums, i+1);path.pop_back();//进入下一层的时候会自动消除,又在本层不能消除}}vector<vector<int>> findSubsequences(vector<int>& nums) {Traversal(nums,0);return res;}
};

总结

感觉明白了。

46.全排列

本题重点感受一下,排列问题 与 组合问题,组合总和,子集问题的区别。 为什么排列问题不用 startIndex

代码随想录

视频讲解:组合与排列的区别,回溯算法求解的时候,有何不同?| LeetCode:46.全排列_哔哩哔哩_bilibili

class Solution {
public:vector<vector<int>>res;vector<int>path;void Traversal(vector<int>nums,int startindex,vector<bool>used){if (path.size()==nums.size()){res.push_back(path);return;}for (int i=0;i<nums.size();i++){if (used[i])continue;used[i]=true;path.push_back(nums[i]);Traversal(nums,i+1,used);used[i]=false;path.pop_back();}}vector<vector<int>> permute(vector<int>& nums) {vector<bool>used(nums.size(),false);Traversal(nums,0,used);return res;}
};

47.全排列 II

本题 就是我们讲过的 40.组合总和II 去重逻辑 和 46.全排列 的结合,可以先自己做一下,然后重点看一下 文章中 我讲的拓展内容。 used[i - 1] == true 也行,used[i - 1] == false 也行

代码随想录

视频讲解:回溯算法求解全排列,如何去重?| LeetCode:47.全排列 II_哔哩哔哩_bilibili

class Solution {
public:vector<vector<int>>res;vector<int>path;void Traversal(vector<int>nums,int startindex,vector<bool>used,vector<bool>visited){if (path.size()==nums.size()){res.push_back(path);return;}for (int i=0;i<nums.size();i++){if (used[i])continue;//这个其实涉及到纵向,所以要用回溯,跳过的值可能不在同一层。if (i>0 && nums[i]==nums[i-1] && visited[i-1]==false)continue;used[i]=true;visited[i]=true;path.push_back(nums[i]);Traversal(nums,i+1,used,visited);used[i]=false;visited[i]=false;path.pop_back();}}vector<vector<int>> permuteUnique(vector<int>& nums) {vector<bool>used(nums.size(),false);sort(nums.begin(),nums.end());vector<bool>visited(nums.size(),false);Traversal(nums,0,used,visited);return res;}
};

http://www.lryc.cn/news/364413.html

相关文章:

  • 音频数据上的会话情感分析
  • 算法金 | 一文读懂K均值(K-Means)聚类算法
  • 江协科技STM32学习-1 购买24Mhz采样逻辑分析仪
  • 支付系统-业务账单
  • AI引领天文新篇章:中科院发现107例中性碳吸收线,揭示宇宙深邃奥秘
  • python 删除pdf 空白页
  • flutter as连接网易模拟器
  • fpga控制dsp6657上电启动配置
  • Tomcat启动闪退问题解决方法
  • 【多模态】34、LLaVA-v1.5 | 微软开源,用极简框架来实现高效的多模态 LMM 模型
  • 文件编码概念
  • uni-app(优医咨询)项目实战 - 第7天
  • 推荐系统学习 二
  • Vue——组件数据传递与props校验
  • Java 基础面试300题 (261-290)
  • 音频信号分析与实践
  • 程序媛:拽姐
  • 前端面试题日常练-day54 【面试题】
  • 054、Python 函数的概念以及定义
  • 今时今日蜘蛛池还有用吗?
  • 【一步一步了解Java系列】:重磅多态
  • 运维工具 - SFTP 和 FTP 的区别?
  • 创新入门|营销中的视频内容:不可或缺的策略
  • 《探索Stable Diffusion:AI绘画的创意之路与实战秘籍》
  • 某铁路信息中心运营监测项目
  • Threejs加载DOM+CSS到场景中,实现3D场景展示2D平面的效果
  • 本地知识库开源框架Fastgpt、MaxKB产品体验
  • 音视频开发15 FFmpeg FLV封装格式分析
  • Qt 的 d_ptr (d-pointer) 和 q_ptr (q-pointer)解析;Q_D和Q_Q指针
  • 【机器学习】深度探索:从基础概念到深度学习关键技术的全面解析——梯度下降、激活函数、正则化与批量归一化