【LeetCode每日一题合集】2023.8.28-2023.9.3(到家的最少跳跃次数)

文章目录

  • 57. 插入区间
  • 823. 带因子的二叉树
    • 解法——递推
  • 1654. 到家的最少跳跃次数(BFS,🚹最远距离上界的证明)
  • 1761. 一个图中连通三元组的最小度数
  • 2240. 买钢笔和铅笔的方案数
    • 解法1——完全背包
    • 解法2——枚举买了几支钢笔(推荐解法)
  • 2511. 最多可以摧毁的敌人城堡数目
    • 解法——一次遍历
  • 1921. 消灭怪物的最大数量(贪心)

57. 插入区间

https://leetcode.cn/problems/insert-interval/
在这里插入图片描述
提示:
0 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 10^5
intervals 根据 intervals[i][0] 按 升序 排列
newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 10^5

当前区间与要加入的新区间之间的关系只有两种可能:相交或者不相交。

如果相交,将两者结合即可。
如果不相交,判断新加入的区间是否在当前区间之前,如果是,就先加入答案。

遍历一遍之后,如果没有处理过新加入的区间,就说明新区间应该加在最后。

class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {if (intervals.length == 0) return new int[][]{newInterval};List<int[]> ans = new ArrayList<>();int s = newInterval[0], e = newInterval[1];boolean f = false;for (int[] interval: intervals) {int a = interval[0], b = interval[1];// 和 newInterval 相交if (b >= s && a <= e) {f = true;a = Math.min(a, s);b = Math.max(b, e);}// 不相交 newInterval 在此区间之前if (a > e) {if (ans.size() == 0 || ans.get(ans.size() - 1)[1] < s) {ans.add(newInterval);f = true;}}if (ans.size() == 0 || ans.get(ans.size() - 1)[1] < a) ans.add(new int[]{a, b});else ans.get(ans.size() - 1)[1] = b;}// 如果没有处理过 newIntervalif (!f) ans.add(newInterval);return ans.toArray(new int[ans.size()][2]);}
}

823. 带因子的二叉树

https://leetcode.cn/problems/binary-trees-with-factors/
在这里插入图片描述
提示:
1 <= arr.length <= 1000
2 <= arr[i] <= 10^9
arr 中的所有值 互不相同

解法——递推

将元素排序之后,从小到大依次处理各个数值作为根节点时的二叉树数量。

class Solution {final long MOD = (long)1e9 + 7;public int numFactoredBinaryTrees(int[] arr) {Arrays.sort(arr);int n = arr.length;long ans = 0;Map<Integer, Long> m = new HashMap<>();         // 存储每个数字作为根节点时的二叉树数量for (int i = 0; i < n; ++i) {long cnt = 1;for (int j = 0; j < i; ++j) {               // 枚举儿子节点if (arr[i] % arr[j] == 0 && m.containsKey(arr[i] / arr[j])) {cnt = (cnt + m.get(arr[j]) * m.get(arr[i] / arr[j])) % MOD;}}ans = (ans + cnt) % MOD;m.put(arr[i], cnt);}return (int)ans;}
}

1654. 到家的最少跳跃次数(BFS,🚹最远距离上界的证明)

https://leetcode.cn/problems/minimum-jumps-to-reach-home/description/
在这里插入图片描述

提示:
1 <= forbidden.length <= 1000
1 <= a, b, forbidden[i] <= 2000
0 <= x <= 2000
forbidden 中所有位置互不相同。
位置 x 不在 forbidden 中。

可以证明,一定可以在[0, max(f + a + b, x + b)] 的下标范围内找到最优解,其中 f 是最远进制点的坐标。
因为 f, a, b, x <= 2000,故搜索范围不会超过 6000。(证明略,我也没整明白)

用 bfs 计算最短路。

class Solution {public int minimumJumps(int[] forbidden, int a, int b, int x) {Set<Integer> s = new HashSet<>();for (int v: forbidden) s.add(v);Deque<int[]> q = new ArrayDeque<>();q.offer(new int[]{0, 1});       // 将起点放入队列final int N = 6000;boolean[][] vis = new boolean[N][2];vis[0][1] = true;for (int ans = 0; !q.isEmpty(); ++ans) {for (int t = q.size(); t > 0; --t) {int[] p = q.poll();int i = p[0], k = p[1];// 到达了目的地,直接返回答案if (i == x) return ans;List<int[]> nxt = new ArrayList<>();nxt.add(new int[]{i + a, 1});// 如果上一步 不是向后跳,那么这一步可以向后跳if ((k & 1) == 1) nxt.add(new int[]{i - b, 0});for (int[] e: nxt) {int j = e[0];k = e[1];if (j >= 0 && j < N && !s.contains(j) && !vis[j][k]) {q.offer(new int[]{j, k});vis[j][k] = true;}}}}return -1;}
}

1761. 一个图中连通三元组的最小度数

https://leetcode.cn/problems/minimum-degree-of-a-connected-trio-in-a-graph/

在这里插入图片描述

提示:
2 <= n <= 400
edges[i].length == 2
1 <= edges.length <= n * (n-1) / 2
1 <= ui, vi <= n
ui != vi
图中没有重复的边。

构造邻接表,枚举每一个三元组。

class Solution {public int minTrioDegree(int n, int[][] edges) {int[] cnt = new int[n + 1];int[][] isC = new int[n + 1][n + 1];for (int[] edge: edges) {int x = edge[0], y = edge[1];isC[x][y] = 1;isC[y][x] = 1;cnt[x]++;cnt[y]++;}int ans = Integer.MAX_VALUE;for (int i = 1; i <= n; ++i) {for (int j = i + 1; j <= n; ++j) {if (isC[i][j] == 0) continue;for (int k = j + 1; k <= n; ++k) {if (isC[j][k] == 0 || isC[i][k] == 0) continue;ans = Math.min(ans, cnt[i] + cnt[j] + cnt[k] - 6);}}}return ans != Integer.MAX_VALUE? ans: -1;}
}

2240. 买钢笔和铅笔的方案数

https://leetcode.cn/problems/number-of-ways-to-buy-pens-and-pencils/

在这里插入图片描述

提示:
1 <= total, cost1, cost2 <= 10^6

解法1——完全背包

套用完全背包模板,对dp数组求和即可。

class Solution {public long waysToBuyPensPencils(int total, int cost1, int cost2) {long[] dp = new long[total + 1];dp[0] = 1;for (int j = cost1; j <= total; ++j) dp[j] += dp[j - cost1];for (int j = cost2; j <= total; ++j) dp[j] += dp[j - cost2];long ans = 0;for (long d: dp) ans += d;return ans;}
}

解法2——枚举买了几支钢笔(推荐解法)

通过枚举购买钢笔的数量,计算此时可以购买铅笔的数量,+1即是购买此时数量钢笔时,购买铅笔的方案数。

class Solution {public long waysToBuyPensPencils(int total, int cost1, int cost2) {long ans = 0;for (int i = 0; i * cost1 <= total; ++i) {ans += (total - i * cost1) / cost2 + 1;}return ans;}
}

2511. 最多可以摧毁的敌人城堡数目

https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/?envType=daily-question&envId=2023-09-02

在这里插入图片描述

提示:
1 <= forts.length <= 1000
-1 <= forts[i] <= 1

解法——一次遍历

题目要求是计算 1 和 -1 之间的 0 的最大数量。

一次遍历,遍历的过程中记录上一个 1 或 -1 出现的位置即可。

class Solution {public int captureForts(int[] forts) {int lastId = 0, ans = 0;for (int i = 0; i < forts.length; ++i) {if (forts[i] == -1 || forts[i] == 1) {if (forts[i] + forts[lastId] == 0) ans = Math.max(ans, i - lastId - 1);lastId = i;}}return ans;}
}

1921. 消灭怪物的最大数量(贪心)

https://leetcode.cn/problems/eliminate-maximum-number-of-monsters/

在这里插入图片描述

提示:
n == dist.length == speed.length
1 <= n <= 10^5
1 <= dist[i], speed[i] <= 10^5

先计算时间,再按时间排序。
贪心的先消灭快要到达城市的怪兽。

class Solution {public int eliminateMaximum(int[] dist, int[] speed) {int n = dist.length;int[] t = new int[n];for (int i = 0; i < n; ++i) {t[i] = (dist[i] + speed[i] - 1) / speed[i]; // 向上取整}Arrays.sort(t);for (int i = 0; i < n; ++i) {if (t[i] <= i) return i;}return n;}
}

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

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

相关文章

LGFormer:LOCAL TO GLOBAL TRANSFORMER FOR VIDEO BASED 3D HUMAN POSE ESTIMATION

基于视频的三维人体姿态估计的局部到全局Transformer 作者&#xff1a;马海峰 *&#xff0c;陆克 * †&#xff0c;薛健 *&#xff0c;牛泽海 *&#xff0c;高鹏程† * 中国科学院大学工程学院&#xff0c;北京100049 鹏程实验室&#xff0c;深圳518055 来源&#xff1a;202…

这可能是最全面的Python入门手册了!

无论是学习任何一门语言&#xff0c;基础知识一定要扎实&#xff0c;基础功非常的重要&#xff0c;找到一个合适的学习方法和资料会让你少走很多弯路&#xff0c; 你的进步速度也会快很多&#xff0c;无论我们学习的目的是什么&#xff0c;不得不说Python真的是一门值得付出时间…

代码泄漏无感知?代码安全审计构筑企业核心资产安全防线

目录 一个不眠之夜 源代码托管&#xff1a;最容易被从内部攻破的堡垒 审计事件&#xff0c;构建源代码安全防护的“最后一道防线” 源代码托管审计事件三要素 源代码托管审计事件的价值 极狐GitLab 审计事件功能 极狐GitLab 审计事件功能特点 极狐GitLab 审计事件功能使…

Support for password authentication was removed on August 13, 2021 解决方案

打开你的github&#xff0c;Setting 点击Developer settings。 点击generate new token 按照需要选择scope 生成token&#xff0c;以后复制下来。 给git设置token样式的remote url git remote set-url origin https://你的tokengithub.com/你的git用户名/仓库名称.git然后就可…

Docker 搭建Redis 集群之路

前言 搞技术就是动手&#xff0c;动手再动手&#xff0c;实践出真知&#xff0c;毕竟最终是要解决问题的呢&#xff0c;废话不多讲&#xff0c;开搞&#xff0c;主要是为了记录一下&#xff0c;毕竟过程还是有点艰辛呢需求&#xff08;target&#xff09; Windows 电脑 装一个…

python 笔记(1)——基础和常用部分

目录 1、print 输出不换行 2、格式化输出字符串 3、浮点数的处理 4、进制转换和ASCII与字符间的转换 5、随机数 6、字符串截取和内置方法 6-1&#xff09;字符串截取 6-2&#xff09;字符串内置方法 7、元组、列表&#xff0c;及其遍历方式 7-1&#xff09;列表常用内…

为什么5G 要分离 CU 和DU?(4G分离RRU 和BBU)

在 Blog 一文中&#xff0c;5G--BBU RRU 如何演化到 CU DU&#xff1f;_5g rru_qq_38480311的博客-CSDN博客 解释了4G的RRU BBU 以及 5G CU DU AAU&#xff0c;主要是讲了它们分别是什么。但是没有讲清楚 为什么&#xff0c;此篇主要回答why。 4G 为什么分离基站为 RRU 和 BBU…

Windows下搜索文件内容的关键字用什么命令

Windows下搜索文件内容的关键字用什么命令 findstr /s /n /i "keyword" file_path其中&#xff0c;/s 表示递归检索子文件夹&#xff0c;/n 表示显示搜索结果所在行号&#xff0c;/i 表示忽略大小写&#xff0c;“keyword” 是要搜索的关键字&#xff0c;file_path 是…

【LeetCode-中等题】17. 电话号码的字母组合

文章目录 题目方法一&#xff1a;递归回溯 题目 方法一&#xff1a;递归回溯 参考讲解&#xff1a;还得用回溯算法&#xff01;| LeetCode&#xff1a;17.电话号码的字母组合 首先可以画出树图&#xff1a; 先将数字对应的字符集合 加入到一个map集合 这里需要一个index来控…

PPT怎么转换为PDF格式,收藏这两个在线工具。

PPT是一种常用的演示文稿格式&#xff0c;它可以包含丰富的动画效果和超链接&#xff0c;让你的内容更加生动和有趣。但是&#xff0c;如果你想将PPT分享给别人&#xff0c;或者在不同的设备上查看&#xff0c;你可能会遇到一些问题&#xff0c;比如&#xff1a; PPT文件太大&a…

使用Python实现二维应力云图

要画应力分布云图&#xff0c;可以使用Python中的科学计算和可视化库来实现 import numpy as np import matplotlib.pyplot as plt# 生成示例数据 x np.linspace(0, 10, 100) # X轴数据范围 y np.linspace(0, 5, 50) # Y轴数据范围 X, Y np.meshgrid(x, y) # 生成网…

Linux命令行

目录 CLI GUI 命令行界面 图形界面 命令行提示符 # $ ​编辑 命令一般由三个部分组成 历史命令&#xff0c;使用上下键&#xff0c;或者使用history&#xff0c;ctrlr搜索历史命令 通配符 *,? 切换用户 su 作业管理 &&#xff0c;jobs,bg,fg CLI GUI 命令行界面 …

内网穿透的应用-不再依赖iCloud!利用群晖生态,自己掌控本地SSD的云存储!

文章目录 前言本教程解决的问题是&#xff1a;按照本教程方法操作后&#xff0c;达到的效果是想使用群晖生态软件&#xff0c;就必须要在服务端安装群晖系统&#xff0c;具体如何安装群晖虚拟机请参考&#xff1a; 1. 安装并配置synology drive1.1 安装群辉drive套件1.2 在局域…

STM32 CAN快速配置(HAL库版本)

STM32 CAN快速配置&#xff08;HAL库版本&#xff09; 目录 STM32 CAN快速配置&#xff08;HAL库版本&#xff09;前言1 软件编程1.1 初始化1.1.1 引脚设置1.1.2 CAN参数设置1.1.3 CAN滤波器设置 1.2 CAN发送1.3 CAN接收 2 运行测试结束语 前言 控制器局域网总线&#xff08;CA…

fastjson漏洞批量检测工具

JsonExp 简介 版本&#xff1a;1.3.5 1. 根据现有payload&#xff0c;检测目标是否存在fastjson或jackson漏洞&#xff08;工具仅用于检测漏洞&#xff09;2. 若存在漏洞&#xff0c;可根据对应payload进行后渗透利用3. 若出现新的漏洞时&#xff0c;可将最新的payload新增至…

深入学习与探索:高级数据结构与复杂算法

文章目录 学习高级数据结构B树&#xff1a;数据库引擎的骨干线段树&#xff1a;高效的区间查询Trie树&#xff1a;高效的字符串检索 探索复杂算法领域图算法&#xff1a;解决复杂网络问题字符串匹配算法&#xff1a;处理文本搜索近似算法&#xff1a;在NP难题上取得近似解 结论…

kubesphere devops使用

一、创建项目 1 创建项目 企业管理员切换到相应企业空间(租户),创建项目&#xff0c;k8s集群会创建一个相同名字的namespace。如下图所示管理员创建一个ipaas-devops项目。 2.创建镜像拉取密钥信息 进入项目如ipaas-devops&#xff0c;选择配置->保密字典->创建&#xf…

“交叉轮”轮融资后,哪吒汽车能否脚踏“风火轮”续写逆袭故事?

2023年的新能源汽车江湖&#xff0c;烟波浩渺的水面下暗潮汹涌。 从特斯拉年初打响降价第一枪&#xff0c;降价潮至今未见尾声。9月刚至&#xff0c;小鹏汽车、零跑汽车又推出了调价政策。 这一背景下&#xff0c;车企内卷加剧是必然。年初&#xff0c;哪吒汽车联合创始人、C…

EOCR-AR电机保护器自动复位的启用条件说明

为适用不同的现场使用需求&#xff0c;施耐德韩国公司推出了带有自动复位功能的模拟型电动机保护器-EOCR-AR。EOCR-AR电机保护器具有过电流、缺相、堵转保护功能&#xff0c;还可根据实际需要设置自动复位时间。 EOCR-AR自动复位的设置方法 如上图&#xff0c;R-TIME旋钮是自动…

巨人互动|Google海外户Google分析的基础概念

Google Analytics&#xff08;谷歌分析&#xff09;是最受欢迎的网站分析工具之一。它为网站管理员提供了深入了解其网站访问者的机会&#xff0c;并通过数据分析提供有关网站流量、用户行为和转化率的洞察。 1、跟踪代码&#xff08;Tracking Code&#xff09; 跟踪代码是嵌入…