day29 回溯

2023-11-01

* 491.递增子序列

        * 采用单层hashmap记录去重,回溯时map会重新刷新,无需回溯处理

* 46.全排列

        * 和组合的区别是,排列需要考虑顺序,因此不能使用startIdx + 1进行数据去除(之后可能使用),需要保证单次递归单个数使用一次(boolean used)

* 47.全排列 II

        * 重复数据,去重套路一致 (sort + used[i - 1] 相同数据,之前使用过的无需再使用)

package algor.trainingcamp;

import java.util.*;

/**
 * @author lizhe
 * @version 1.0
 * @description:
 * @date 2023/5/3 09:42
 * 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。
 * <p>
 * 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。
 * <p>
 * <p>
 * 491. 递增子序列
 * 考虑去重方式: 使用map进行去重,这也是需要注意的点, 是记录本层元素是否重复使用,
 * 新的一层map都会重新定义(清空),所以要知道map只负责本层!
 */
public class LeetCode491 {
    List<List<Integer>> res = new ArrayList<>();
    LinkedList<Integer> sub = new LinkedList<>();

    public List<List<Integer>> findSubsequences(int[] nums) {
        helper(nums, 0);
        return res;
    }

    public void helper(int[] nums, int idx) {
        //子序列的大小 > 2
        if (sub.size() > 1) {
            res.add(new ArrayList(sub));
        }

        Map<Integer, Integer> map = new HashMap<>();
        for (int i = idx; i < nums.length; i++) {
            if(!sub.isEmpty() && nums[i] < sub.getLast()){
                continue;
            }
            //去重操作
            if(map.getOrDefault(nums[i], 0) >= 1){
                continue;
            }

            map.put(nums[i], map.getOrDefault(nums[i], 0) + 1);
            sub.add(nums[i]);
            helper(nums, i + 1);
            sub.removeLast();
        }
    }
}

         

package algor.trainingcamp;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

/**
 * @author lizhe
 * @version 1.0
 * @description: 46. 全排列,无需使用startIndex 但是需要保证不会出现单个数使用多次的情况
 * @date 2023/5/3 10:23
 */
public class LeetCode46 {
    List<List<Integer>> res = new ArrayList<>();
    LinkedList<Integer> sub = new LinkedList<>();

    public List<List<Integer>> permute(int[] nums) {
        if(null == nums || nums.length == 0){
            return res;
        }
        boolean[] used = new boolean[nums.length];

        helper(nums, used);
        return res;
    }

    public void helper(int[] nums, boolean[] used){
        if(sub.size() == nums.length){
            res.add(new ArrayList<>(sub));
            return;
        }

        for(int i = 0;i < nums.length;i++){
            if(used[i]){
                continue;
            }
            used[i] = true;
            sub.add(nums[i]);
            helper(nums, used);
            sub.removeLast();
            used[i] = false;
        }
    }
}
package algor.trainingcamp;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

/**
 * @author lizhe
 * @version 1.0
 * @description: 全排列_不重复 使用 Arrays.sort + used[i - 1] 进行去重
 * @date 2023/5/3 10:36
 */
public class LeetCode47 {
    List<List<Integer>> res = new ArrayList<>();
    LinkedList<Integer> sub = new LinkedList<>();

    public List<List<Integer>> permuteUnique(int[] nums) {
        if(null == nums || nums.length == 0){
            return res;
        }
        Arrays.sort(nums);
        boolean[] used = new boolean[nums.length];

        helper(nums, used);
        return res;
    }

    public void helper(int[] nums, boolean[] used){
        if(sub.size() == nums.length){
            res.add(new ArrayList<>(sub));
            return;
        }

        for(int i = 0;i < nums.length;i++){
            if(i > 0 && nums[i] == nums[i - 1] && used[i - 1]){
                continue;
            }

            if(used[i]){
                continue;
            }

            used[i] = true;
            sub.add(nums[i]);
            helper(nums, used);
            sub.removeLast();
            used[i] = false;
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day29 回溯 的相关文章

  • Grails 3.x bootRun 失败

    我正在尝试在 grails 3 1 11 中运行一个项目 但出现错误 失败 构建失败并出现异常 什么地方出了错 任务 bootRun 执行失败 进程 命令 C Program Files Java jdk1 8 0 111 bin java
  • 如何为最终用户方便地启动Java GUI程序

    用户想要从以下位置启动 Java GUI 应用程序Windows 以及一些额外的 JVM 参数 例如 javaw Djava util logging config file logging properties jar MyGUI jar
  • Java Swing:从 JOptionPane 获取文本值

    我想创建一个用于 POS 系统的新窗口 用户输入的是客户拥有的金额 并且窗口必须显示兑换金额 我是新来的JOptionPane功能 我一直在使用JAVAFX并且它是不同的 这是我的代码 public static void main Str
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 java 类和 android 活动之间传输时音频不清晰

    我有一个android活动 它连接到一个java类并以套接字的形式向它发送数据包 该类接收声音数据包并将它们扔到 PC 扬声器 该代码运行良好 但在 PC 扬声器中播放声音时会出现持续的抖动 中断 安卓活动 public class Sen
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • 列出jshell中所有活动的方法

    是否有任何命令可以打印当前 jshell 会话中所有新创建的方法 类似的东西 list但仅适用于方法 您正在寻找命令 methods all 它会打印所有方法 包括启动 JShell 时添加的方法 以及失败 被覆盖或删除的方法 对于您声明的
  • Liferay ClassNotFoundException:DLFileEntryImpl

    在我的 6 1 0 Portal 实例上 带有使用 ServiceBuilder 和 DL Api 的 6 1 0 SDK Portlet 这一行 DynamicQuery query DynamicQueryFactoryUtil for
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • JRE 系统库 [WebSphere v6.1 JRE](未绑定)

    将项目导入 Eclipse 后 我的构建路径中出现以下错误 JRE System Library WebSphere v6 1 JRE unbound 谁知道怎么修它 右键单击项目 特性 gt Java 构建路径 gt 图书馆 gt JRE
  • 加密 JBoss 配置中的敏感信息

    JBoss 中的标准数据源配置要求数据库用户的用户名和密码位于 xxx ds xml 文件中 如果我将数据源定义为 c3p0 mbean 我会遇到同样的问题 是否有标准方法来加密用户和密码 保存密钥的好地方是什么 这当然也与 tomcat
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • Android 中麦克风的后台访问

    是否可以通过 Android 手机上的后台应用程序 服务 持续监控麦克风 我想做的一些想法 不断聆听背景中的声音信号 收到 有趣的 音频信号后 执行一些网络操作 如果前台应用程序需要的话 后台应用程序必须能够智能地放弃对麦克风的访问 除非可
  • 当我从 Netbeans 创建 Derby 数据库时,它存储在哪里?

    当我从 netbeans 创建 Derby 数据库时 它存储在哪里 如何将它与项目的其余部分合并到一个文件夹中 右键单击Databases gt JavaDB in the Service查看并选择Properties This will
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview

随机推荐

  • linux 网络编程

    linux网络编程 一 网络编程概述 1 概述 2 TCP UDP 3 端口号作用 二 字节序 三 socket编程步骤 四 linux提供的API简析 1 连接协议 2 连接地址 3 地址转换API 4 监听 5 连接 6 数据收发 7
  • Mysql 创建触发器 学习教程

    触发器 trigger 监视某种情况 并触发某种操作 触发器经常用于加强数据的完整性约束和业务规则等 触发器创建语法四要素 1 监视地点 table 2 监视事件 insert update delete 3 触发时间 after befo
  • 使用FORCE训练的脉冲神经网络中的监督学习(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1第一代神经网络 1 2 第二代神经网络 BP 神经网络 1 3 第三代神经网络 脉冲神经网络 2 运
  • CentOS下CGAL开发环境配置

    目录 1 必要的说明 1 1 简介 1 2 软件安装说明 2 依赖软件安装 2 1 GMP MPFR MPC GCC 2 2 Boost 2 3 CMake 2 4 Qt 3 CGAL 4 测试 4 1 构建一个Example 4 2 使用
  • WebSell管理工具--中国蚁剑安装教程以及初始化

    简介 中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装 GitHub项目地址 https github com AntSwordProject Windows下载安装 百度网盘下载链接 链接 https pan bai
  • vue配置别名

    在项目根目录下新建vue config js文件 添加类似如下代码 表示src目录 module exports configureWebpack resolve alias components components common com
  • Cesium源码结构及说明

    文章目录 目录 文章目录 前言 一 Cesium源码结构 二 源码编译 1 安装npm 2 开始编译 总结 前言 前面提了一些Cesium大概情况 本章主要讲述Cesium源码结构及说明 提示 以下是本篇文章正文内容 下面案例可供参考 一
  • 如何使用java调用易班登录API获取个人账号信息(一)

    关于这篇文章 笔者近期和小伙伴接了校方的一个小小小项目 要求使用易班APP的账号 这意味着需要调用易班官方的登录API 下面介绍使用java语言作为后端 在自己的网站如何接入易班的登录API 轻应用 移动应用的操作大同小异 关于改造成前后端
  • viso画图时如何让右侧显示设置形状格式栏

    选中一个形状 右击 点击设置形状格式 就出来了 我也琢磨了好久
  • batchsize、iteration、epoch之间的关系

    batchsize iteration epoch之间的关系 有的时候总是会弄错batchsize iteration epoch之间的关系 现在终于明白了 1 batchsize是批次大小 假如取batchsize 24 则表示每次训练时
  • [HFCTF2020]EasyLogin

    HFCTF2020 EasyLogin 继续刷题 打开环境 发现是一个登录页面 F12一下 发现有一个js可以看看看到了js代码 但是用处似乎不大 它提示用的是koa框架 了解一下koa目录的基本结构 我们访问 controllers ap
  • Vim配置以及操作

    目录 一 光标控制 单位级 单词级 块级 二 打开文件 查找内容 在 Vim 中打开文件 文档内查找内容 行内查找 匹配查找 文件历史buffer 三 插入 修改内容 插入内容 删除 并保存到 Vim 剪贴板 复制 粘贴 粘贴 合并 替换
  • 图文混排实现文字图片居中

    本文只是将洋神文章中的部分摘录出来 方便以后查看 实现图文混排setSpan不管文字比图片大还是图片比文字大都可以居中显示 原文链接http www sohu com a 150059234 611601 实现类 public class
  • CentOS MySQL 提示:MySQL server PID file could not be found!

    今天在连接测试环境MySQL 时 突然出现如下的错误情况 root iZ94ax97oadZ log service mysql restart MySQL server PID file could not be found FAILED
  • centos搭建redis并配置redis主从复制

    一 gcc环境搭建 1 检查是否有gcc环境 gcc v 运行命令 gcc v 如果显示 bash gcc command not found 表示没有该环境 如果显示下文 代表有gcc环境 Using built in specs COL
  • 浮点数比较大小的问题

    因为计算机存储的特性 任意两个浮点是不能用 直接比较 比较好的方法就是用两个数之间的差值小于某个最小值 比如对于两个浮点数a b 如果要比较大小 那么常常会设置一个精度 如果fabs a b lt 1e 6 那么就是相等了 fabs是求浮点
  • Red Hat Enterprise Linux 8.0 正式版镜像下载

    https wanghualang pipipan com fs 13133650 373050989 转载于 https blog 51cto com wanghualang 2390717
  • 多元微积分_多元链式法则

    对于二元方程和单变量函数组成的复合方程 输入变量t是一维 经过函数f将一维的输入t摄入二维的x y平面 然后复合函数再将二维的输入提取到一维 那么这个复合函数的导数是什么呢 带入一元函数 带入f x y 针对这个复合函数求导 根据链式法则
  • C#打乱数组顺序

    随机打算int数组 public int GetRandomNum int num for int i 0 i lt num Length i int temp num i int randomIndex Random Range 0 nu
  • day29 回溯

    491 递增子序列 采用单层hashmap记录去重 回溯时map会重新刷新 无需回溯处理 46 全排列 和组合的区别是 排列需要考虑顺序 因此不能使用startIdx 1进行数据去除 之后可能使用 需要保证单次递归单个数使用一次 boole