LeetCode:3376. 破解锁的最少时间 I(DFS回溯 Java)

news2024/12/22 11:23:22

目录

3376. 破解锁的最少时间 I

题目描述:

实现代码与解析:

DFS

原理思路:


3376. 破解锁的最少时间 I

题目描述:

Bob 被困在了一个地窖里,他需要破解 n 个锁才能逃出地窖,每一个锁都需要一定的 能量 才能打开。每一个锁需要的能量存放在一个数组 strength 里,其中 strength[i] 表示打开第 i 个锁需要的能量。

Bob 有一把剑,它具备以下的特征:

  • 一开始剑的能量为 0 。
  • 剑的能量增加因子 X 一开始的值为 1 。
  • 每分钟,剑的能量都会增加当前的 X 值。
  • 打开第 i 把锁,剑的能量需要到达 至少 strength[i] 。
  • 打开一把锁以后,剑的能量会变回 0 ,X 的值会增加一个给定的值 K 。

你的任务是打开所有 n 把锁并逃出地窖,请你求出需要的 最少 分钟数。

请你返回 Bob 打开所有 n 把锁需要的 最少 时间。

示例 1:

输入:strength = [3,4,1], K = 1

输出:4

解释:

时间能量X操作更新后的 X
001什么也不做1
111打开第 3 把锁2
222什么也不做2
342打开第 2 把锁3
433打开第 1 把锁3

无法用少于 4 分钟打开所有的锁,所以答案为 4 。

示例 2:

输入:strength = [2,5,4], K = 2

输出:5

解释:

时间能量X操作更新后的 X
001什么也不做1
111什么也不做1
221打开第 1 把锁3
333什么也不做3
463打开第 2 把锁5
555打开第 3 把锁7

无法用少于 5 分钟打开所有的锁,所以答案为 5 。

提示:

  • n == strength.length
  • 1 <= n <= 8
  • 1 <= K <= 10
  • 1 <= strength[i] <= 106

实现代码与解析:

DFS

class Solution {
    public int findMinimumTime(List<Integer> strength, int k) {
        
        dfs(0, 0, strength.toArray(new Integer[strength.size()]), k);
        return res;
    }

    int res = 0x3f3f3f3f;

    private void dfs(int cnt, int cur, Integer[] strength, int k) {
        if (cur >= res) {
            return;
        }
        if (cnt == strength.length) {
            res = cur;
            return;
        }

        int x = 1 + k * cnt;
        for (int i = 0; i < strength.length; i++) {
            if (strength[i] == -1) continue;
            int tmp = strength[i];
            strength[i] = -1;
            dfs(cnt + 1, cur + (tmp - 1) / x + 1, strength, k);
            strength[i] = tmp;
        }

    }
}

原理思路:

        dfs全排列遍历。

  • cnt:已处理锁的序号(从 0 起),据此知晓当前开锁阶段,也能算能量增加因子。
  • cur:当前累计时间。
  • strength:存各锁所需能量值的数组,递归中通过标记元素,设为 -1表示锁是否已处理。
  • k:与剑能量增加因子变化规则相关,开锁后按其增加,用于准确算剑能量增长情况。

递归边界条件及剪枝操作:

  • if (cur >= res) 是剪枝判断,若当前累计时间大于等于已找到的最少时间,当前开锁策略不优,直接返回,避免多余搜索分支。
  • if (cnt == strength.length) 是终止条件,处理完所有锁,若 cur 小于 res(即更优),将 cur 更新给 res 后返回。

核心递归逻辑及操作:

  • 先算 x = 1 + k * cntx 为当前剑能量增加因子,初始值 1(cnt = 0 时),开锁后按 k 增加,用于算积攒能量开下锁的时间。
  • for 循环遍历 strength 数组:
    • if (strength[i] == -1) 跳过已标记 -1 的元素,意味着已处理过。
    • int tmp = strength[i]; 保存当前锁能量值,方便后续操作与恢复。
    • strength[i] = -1; 标记当前锁已处理。
    • dfs(cnt + 1, cur + (tmp - 1) / x + 1, strength, k); 核心递归,处理下锁,更新 cur(tmp - 1) / x + 1 算开当前锁额外花费等待时间,向上取整,继续下一层递归。
    • strength[i] = tmp; 递归结束后恢复元素值,便于回溯尝试其他开锁顺序。

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

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

相关文章

图书馆管理系统(三)基于jquery、ajax

任务3.4 借书还书页面 任务描述 这部分主要是制作借书还书的界面&#xff0c;这里我分别制作了两个网页分别用来借书和还书。此页面&#xff0c;也是通过获取books.txt内容然后添加到表格中&#xff0c;但是借还的操作没有添加到后端中去&#xff0c;只是一个简单的前端操作。…

springboot450房屋租赁管理系统(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统房屋租赁管理系统信息管理难度大&#xff0c;容错率低&am…

vue框架的搭建

1什么是Node.js&#xff1b; Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境, 它让开发人员能够创建服务器 Web 应用、命令行工具和脚本 Node.js下载&#xff1a; 下载Node 16.20.2 安装Node.js 安装Node.js 测试安装 运行命令行 win键R 查看node版本 输入&am…

TCP基础了解

什么是 TCP &#xff1f; TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的&#xff1b; 可靠的&#xff1a;无论…

电商数据采集电商,行业数据分析,平台数据获取|稳定的API接口数据

电商数据采集可以通过多种方式完成&#xff0c;其中包括人工采集、使用电商平台提供的API接口、以及利用爬虫技术等自动化工具。以下是一些常用的电商数据采集方法&#xff1a; 人工采集&#xff1a;人工采集主要是通过基本的“复制粘贴”的方式在电商平台上进行数据的收集&am…

C语言-稀疏数组转置

1.题目要求 2.代码实现 #include <stdio.h> #define MAX_TERM 80// 定义稀疏矩阵结构体 typedef struct juzhen {int row;int col;int value; } Juzhen;// 显示稀疏矩阵 void show(Juzhen a[], int count_a) {printf(" i row col val\n");for (int i 1; i &…

在 Spring Boot 3 中实现基于角色的访问控制

基于角色的访问控制 (RBAC) 是一种有价值的访问控制模型,可增强安全性、简化访问管理并提高效率。它在管理资源访问对安全和运营至关重要的复杂环境中尤其有益。 我们将做什么 我们有一个包含公共路由和受限路由的 Web API。受限路由需要数据库中用户的有效 JWT。 现在用户…

计算机毕业设计python+spark+hive动漫推荐系统 漫画推荐系统 漫画分析可视化大屏 漫画爬虫 漫画推荐系统 漫画爬虫 知识图谱 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

SAP抓取外部https报错SSL handshake处理方法

一、问题描述 SAP执行报表抓取https第三方数据,数据获取失败。 报错消息: SSL handshake with XXX.COM:449 failed: SSSLERR_SSL_READ (-58)#SAPCRYPTO:SSL_read() failed##SapSSLSessionStartNB()==SSSLERR_SSL_READ# SSL:SSL_read() failed (536875120/0x20001070)# …

OpenCV基本图像处理操作(三)——图像轮廓

轮廓 cv2.findContours(img,mode,method) mode:轮廓检索模式 RETR_EXTERNAL &#xff1a;只检索最外面的轮廓&#xff1b;RETR_LIST&#xff1a;检索所有的轮廓&#xff0c;并将其保存到一条链表当中&#xff1b;RETR_CCOMP&#xff1a;检索所有的轮廓&#xff0c;并将他们组…

告别机器人味:如何让ChatGPT写出有灵魂的内容

目录 ChatGPT的一些AI味道小问题 1.提供编辑指南 2.提供样本 3.思维链大纲 4.融入自己的想法 5.去除重复增加多样性 6.删除废话 ChatGPT的一些AI味道小问题 大多数宝子们再使用ChatGPT进行写作时&#xff0c;发现我们的老朋友ChatGPT在各类写作上还有点“机器人味”太重…

对于给定PI参数的锁相环带宽简单计算方法

锁相环的控制框图一般为&#xff1a; 对于锁相环的闭环传递函数&#xff1a; H ( s ) K P L L p s K P L L i s 2 K P L L p s K P L L i H(s)\frac{K_{PLLp}sK_{PLLi}}{s^2K_{PLLp}sK_{PLLi}} H(s)s2KPLLp​sKPLLi​KPLLp​sKPLLi​​ 我们可以通过分析系统的特征方程&a…

day14-16系统服务管理和ntp和防火墙

一、自有服务概述 服务是一些特定的进程&#xff0c;自有服务就是系统开机后就自动运行的一些进程&#xff0c;一旦客户发出请求&#xff0c;这些进程就自动为他们提供服务&#xff0c;windows系统中&#xff0c;把这些自动运行的进程&#xff0c;称为"服务" window…

【数据集】玻璃门窗缺陷检测数据集3085张5类YIOLO+VOC格式

数据集格式&#xff1a;VOC格式YOLO格式 压缩包内含&#xff1a;3个文件夹&#xff0c;分别存储图片、xml、txt文件 JPEGImages文件夹中jpg图片总计&#xff1a;3085 Annotations文件夹中xml文件总计&#xff1a;3085 labels文件夹中txt文件总计&#xff1a;3085 标签种类数&am…

SLM510A系列——24V,15到150mA单通道可调电流线性恒流LED驱动芯片

SLM510A 系列产品是单通道、高精度、可调电流线性恒流源的 LED 驱动芯片&#xff0c;在各种 LED 照明产品中非常简单易用。其在宽电压输入范围内&#xff0c;能保证极高的输出电流精度&#xff0c;从而在大面积的光源照明中&#xff0c;都能让 LED 照明亮度保持均匀一致。 由于…

前后端联调环境配置

1、常规情况&#xff1a;登录页和后台管理系统是同一个IP地址 // vite.config.js import { defineConfig } from vite; import vue from vitejs/plugin-vue;// https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],server: {proxy: {// 将本地的 /api …

ansible的流程控制

Ansible 剧本的流程控制通过任务的顺序执行、条件语句&#xff08;when&#xff09;、循环&#xff08;with_items 等&#xff09;、错误处理&#xff08;ignore_errors 和 block&#xff09;、以及任务标签和角色来实现。可以根据条件动态控制任务执行&#xff0c;使用循环处理…

初学stm32 --- 系统时钟配置

众所周知&#xff0c;时钟系统是 CPU 的脉搏&#xff0c;就像人的心跳一样。所以时钟系统的重要性就不言而喻了。 STM32 的时钟系统比较复杂&#xff0c;不像简单的 51 单片机一个系统时钟就可以解决一切。于是有人要问&#xff0c;采用一个系统时钟不是很简单吗&#xff1f;为…

王佩丰24节Excel学习笔记——第十一讲:Vlookup函数

【以 Excel2010 系列学习&#xff0c;用 Office LTSC 专业增强版 2021 实践】 【本章小技巧】 掌握vlookup使用方法&#xff0c;选区的第一列一定是查询参数条件一。使用通配符查询。vlookup 限 255 位长度。掌握日常使用场景。使用vlookup模糊匹配查询个税 一、使用Vlookup函…

3D和AR技术在电商行业的应用有哪些?

3D展示和AR技术在电商行业的应用为消费者带来了更为直观、沉浸式的购物体验&#xff0c;显著提升了商品展示效果和销售转化率。以下是3D和AR技术在电商行业的具体应用&#xff1a; 1、商品3D展示&#xff1a; 通过3D技术&#xff0c;商品可以在电商平台上以三维形式呈现&…