408算法题leetcode--第32天

news2024/10/12 20:25:34

90. 子集 II

题目地址:90. 子集 II - 力扣(LeetCode)

题解思路:子集 + 去重

时间复杂度:O(n * 2^n)

空间复杂度:O(n)

代码:

class Solution {
public:
    vector<vector<int>>ret;
    vector<int>v;

    void backtrack(vector<int>&nums, int start){
        ret.push_back(v);  // 子集
        if(start >= nums.size()){
            return ;
        }
        int size = nums.size();
        for(int i = start; i < size; i++){
            // 重复的子集
            if(i > start && nums[i] == nums[i - 1]){
                continue;
            }
            v.push_back(nums[i]);
            backtrack(nums, i + 1);
            v.pop_back();
        }
    }

    vector<vector<int>> subsetsWithDup(vector<int>& nums) {
        sort(nums.begin(), nums.end());
        backtrack(nums, 0);
        return ret;
    }
};

491. 非递减子序列

题目地址:491. 非递减子序列 - 力扣(LeetCode)

题解思路:子集,递增,去重,元素个数>2

时间复杂度:O(n * 2^n)

空间复杂度:O(n)

代码:

class Solution {
public:
    vector<vector<int>>ret;
    vector<int>v;

    void backtrack(vector<int>& nums, int start){
        if(v.size() > 1){
            ret.push_back(v);
        }
        if(start >= nums.size()){
            return ;
        }
        // 同一层
        unordered_set<int>st;
        int size = nums.size();
        for(int i = start; i < size; ++i){
            // 递增
            if(!v.empty() && nums[i] < v.back()){
                continue;
            }
            // 不重复
            if(st.find(nums[i]) == st.end()){
                st.insert(nums[i]);
                v.push_back(nums[i]);
                backtrack(nums, i + 1);
                v.pop_back();
            }
        }
    }

    vector<vector<int>> findSubsequences(vector<int>& nums) {
        // 子集,递增
        backtrack(nums, 0);
        return ret;
    }
};

46. 全排列

题目地址:46. 全排列 - 力扣(LeetCode)

题解思路:回溯,注意遍历过的元素不可以再次遍历

时间复杂度:O(n!)

空间复杂度:O(n)

代码:

class Solution {
public:
    vector<vector<int>>ret;
    vector<int>v;
    unordered_set<int>uset;

    void backtrack(vector<int>& nums){
        if(v.size() == nums.size()){
            ret.push_back(v);
            return ;
        }
        for(auto i : nums){
            if(uset.find(i) == uset.end()){
                uset.insert(i);
                v.push_back(i);
                backtrack(nums);
                v.pop_back();
                uset.erase(i);
            }
        }
    }

    vector<vector<int>> permute(vector<int>& nums) {
        backtrack(nums);
        return ret;
    }
};

47. 全排列 II

题目地址:47. 全排列 II - 力扣(LeetCode)

题解思路:全排列,去重

时间复杂度:O(n * n!)

空间复杂度:O(n)

代码:

class Solution {
public:
    vector<vector<int>>ret;
    vector<int>v;

    void backtrack(vector<int>& nums, vector<int>& used_id){
        if(nums.size() == v.size()){
            ret.push_back(v);
            return ;
        }
        unordered_set<int>cut;
        int size = nums.size();
        for(int i = 0; i < size; i++){
            if(used_id[i] == 0){  // 同一分支
                if(cut.find(nums[i]) == cut.end()){
                    // 同层
                    cut.insert(nums[i]);
                    used_id[i] = 1;
                    v.push_back(nums[i]);
                    backtrack(nums, used_id);
                    v.pop_back();
                    used_id[i] = 0;
                }
            }
        }
    }

    vector<vector<int>> permuteUnique(vector<int>& nums) {
        // 同一层不能重复
        vector<int>used_id(nums.size(), 0);
        backtrack(nums, used_id);
        return ret;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2208699.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Skyeye 云智能制造 v3.14.8 发布,ERP 商城 + AI

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

(JAVA)2-3树思想与红黑树的实现与基本原理

1. 平衡树 ​ 学习过二叉查找树&#xff0c;发现它的查询效率比单纯的链表和数组的查询效率要高很多。 ​ 大部分情况下确实是这样的&#xff0c;但不幸的是&#xff0c;在最坏情况下&#xff0c;二叉查找树的性能还是很糟糕。 ​ 例如我们一次往二叉树中插入9,8,7,6,5,4,3,…

【LeetCode】动态规划—714. 买卖股票的最佳时机含手续费(附完整Python/C++代码)

动态规划—714. 买卖股票的最佳时机含手续费 题目描述前言基本思路1. 问题定义2. 理解问题和递推关系状态定义&#xff1a;状态转移公式&#xff1a;初始条件&#xff1a; 3. 解决方法动态规划方法伪代码&#xff1a; 4. 进一步优化5. 小总结 Python代码Python代码解释总结&…

出海电商新怎样用海外云手机引流?

随着互联网行业的迅猛发展&#xff0c;出海电商、海外社交媒体营销以及游戏产业等领域对技术工具的需求不断增加。在这种趋势下&#xff0c;海外云手机作为一种新型解决方案&#xff0c;正在受到广泛关注。 特别是在出海电商中&#xff0c;平台如亚马逊、速卖通、eBay等通过结合…

Mysql(八) --- 视图

文章目录 前言1.什么是视图&#xff1f;2.创建视图3. 使用视图4. 修改数据4.1.注意事项 5. 删除视图6.视图的优点 前言 前面我们学习了索引&#xff0c;这次我们来学习视图 1.什么是视图&#xff1f; 视图是一个虚拟的表&#xff0c;它是基于一个或多个基本表或其他视图的查询…

8款宝藏手机app,适配安卓和苹果手机

好用的手机APP太多&#xff0c;差点挑花了眼&#xff01;今天来分享4款苹果手机和4款安卓手机上的宝藏软件&#xff0c;看看你喜欢哪一款~ IOS系统APP 1.搜图神器 一款拥有海量图片资源的图片搜索神器&#xff0c;它聚合海内外知名搜索引擎&#xff0c;想要图片直接搜索就行…

用java来编写web界面

一、ssm框架整体目录架构 二、编写后端代码 1、编写实体层代码 实体层代码就是你的对象 entity package com.cv.entity;public class Apple {private Integer id;private String name;private Integer quantity;private Integer price;private Integer categoryId;public…

【JavaScript】LeetCode:61-65

文章目录 61 课程表62 实现Trie&#xff08;前缀树&#xff09;63 全排列64 子集65 电话号码的字母组合 61 课程表 Map BFS拓扑排序&#xff1a;将有向无环图转为线性顺序。遍历prerequisites&#xff1a;1. 数组记录每个节点的入度&#xff0c;2. 哈希表记录依赖关系。n 6&a…

Vulnhub靶场案例渗透[7]- DC7

文章目录 1. 靶场搭建2. 信息收集2.1 确定靶机ip2.2 服务信息收集2.3 社工信息收集 3. 提权 1. 靶场搭建 靶场源地址 检验下载文件的检验码&#xff0c;对比没问题使用vmware打开 # windwos 命令 Get-FileHash <filePath> -Algorithm MD5 # linux md5sum filepath2. 信…

视频汇聚平台EasyCVR支持云端录像丨监控存储丨录像回看丨录像计划丨录像配置

EasyCVR视频汇聚融合平台&#xff0c;是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。平台以其强大的视频处理、汇聚与融合能力&#xff0c;在构建视频监控系统中展现出了独特的优势。 EasyCVR视频汇聚平台可接入传统监控行业中高清网络摄像机的RTSP…

提升实验室效率的秘籍

有组织、高效的实验室而言&#xff0c;业务“人、机、料、法、环、测”的多维度发展至关重要&#xff0c;为了提高实验室管理效率和质量&#xff0c;许多实验室开始采用LIMS&#xff08;实验室信息管理系统&#xff09;软件来辅助管理。LIMS软件能够帮助实验室实现信息化、自动…

leetcode 3217 从链表中移除在数组中的结点

1.题目要求: 给你一个整数数组 nums 和一个链表的头节点 head。从链表中移除所有存在于 nums 中的节点后&#xff0c;返回修改后的链表的头节点。 示例 1&#xff1a; 输入&#xff1a; nums [1,2,3], head [1,2,3,4,5] 输出&#xff1a; [4,5] 解释&#xff1a; 移除数值…

Java中的枚举

1.1 认识枚举 枚举是一种特殊的类&#xff0c;它的格式是&#xff1a; public enum 枚举类名{枚举项1,枚举项2,枚举项3; } 其实枚举项就表示枚举类的对象&#xff0c;只是这些对象在定义枚举类时就预先写好了&#xff0c;以后就只能用这几个固定的对象。 定义一个枚举类&am…

使用VS2015编写C语言程序

前面我们给出了一段完整的C语言代码&#xff0c;就是在显示器上输出“C语言中文网”&#xff0c;如下所示&#xff1a; #include <stdio.h>int main(){puts("C语言中文网");return 0;}本节我们就来看看如何通过 VS2015 来运行这段代码。 1) 创建项目&#xf…

QD1-P8 HTML 格式化标签(font、pre、b、strong、i、u、del、s、sub、sup)

本节学习&#xff1a;HTML 格式化标签。 本节视频 www.bilibili.com/video/BV1n64y1U7oj?p8 ‍ 一、font 标签 用途&#xff1a;定义文本的字体大小、颜色和 face&#xff08;字体类型&#xff09;。 示例 <!DOCTYPE html> <html><head><meta cha…

Tkinter:为什么多个Frame相互覆盖?

在 Tkinter 中&#xff0c;Frame 是一个容器部件&#xff0c;用于组织和管理布局。如果多个 Frame 出现在同一个父容器中并且看起来相互覆盖&#xff0c;通常与布局管理器的使用方式或控件的创建顺序有关。 以下是几个常见的原因和解决方案&#xff0c;帮助你了解为什么多个 F…

生产报工信息化全流程大讲解

在企业的生产管理中&#xff0c;生产报工是一个关键环节&#xff0c;但传统的生产报工方式存在诸多痛点&#xff0c;制约了企业的发展。随着数字化技术的发展&#xff0c;多个平台为企业提供了有效的解决方案。基于生产报工信息化方案报告》白皮书&#xff0c;本文深入探讨生产…

三菱FX3U PLC绝对定位- DRVA指令

指令格式 相关软元件一览 功能和动作 这是采用绝对驱动的单速定位指令。采用从原点(0点)开始的距离指定方式&#xff0c; 也被称为绝对驱动方式。 1、在指令执行过程中&#xff0c;即使改变操作数的内容&#xff0c;也不反映到当前的运行中。 在下次的指令驱动时才有效…

客户服务的未来趋势:智能化与人性化的融合

在当今这个日新月异的数字时代&#xff0c;企业的竞争已不再局限于产品或服务的本身&#xff0c;而是延伸到了客户体验的每一个细微之处。数字化转型作为推动这一变革的重要力量&#xff0c;正深刻改变着客户服务的面貌&#xff0c;使之变得更加智能、便捷且充满人性化。随着人…

最长回文子串-双下标动态规划

题目来源&#xff1a;Leetcode 5.最长回文子串 DP定义&#xff1a; 容易想到&#xff0c;用一个二维数字dp[i][j]来表示s[i:j]是否是回文串&#xff0c;如s“daba”。dp[1][3]1表示"aba"为回文串&#xff1b; 递归条件 想要判断字符串"aba"是否为回文…