【LeetCode每日一题合集】2023.8.14-2023.8.20(⭐切披萨3n块披萨)

文章目录

  • 617. 合并二叉树
  • 833. 字符串中的查找与替换(模拟)
  • 2682. 找出转圈游戏输家(模拟)
  • 1444. 切披萨的方案数(⭐⭐⭐⭐⭐)
    • 解法——从递归到递推到优化(二维前缀和+记忆化搜索)
  • 1388. 3n 块披萨(⭐⭐⭐⭐⭐脑筋急转弯:转换问题)
    • 解法——将问题转化为:选择n个披萨,且任意两个数不能相邻,求这n个数的最大值(环形打家劫舍 + 最多买卖k次的股票)
  • 2235. 两整数相加(真·梦开始的地方)
  • 2236. 判断根结点是否等于子结点之和(真·梦开始的地方2)

617. 合并二叉树

https://leetcode.cn/problems/merge-two-binary-trees/

在这里插入图片描述

提示:
两棵树中的节点数目在范围 [0, 2000] 内
-10^4 <= Node.val <= 10^4

class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {if (root1 == null) return root2;else if (root2 == null) return root1;root1.val += root2.val;root1.left = mergeTrees(root1.left, root2.left);root1.right = mergeTrees(root1.right, root2.right);return root1;}
}

833. 字符串中的查找与替换(模拟)

https://leetcode.cn/problems/find-and-replace-in-string/
在这里插入图片描述

只看题面比较难以理解题目意思,得看一个示例:
在这里插入图片描述

提示:
1 <= s.length <= 1000
k == indices.length == sources.length == targets.length
1 <= k <= 100
0 <= indexes[i] < s.length
1 <= sources[i].length, targets[i].length <= 50
s 仅由小写英文字母组成
sources[i] 和 targets[i] 仅由小写英文字母组成

class Solution {public String findReplaceString(String s, int[] indices, String[] sources, String[] targets) {int n = s.length();String[] ans = new String[n];   // 存储每个位置被换成了什么for (int i = 0; i < indices.length; ++i) {// 检查是否需要替换if (indices[i] + sources[i].length() <= n && sources[i].equals(s.substring(indices[i], indices[i] + sources[i].length()))) {ans[indices[i]] = targets[i];for (int j = indices[i] + 1; j < indices[i] + sources[i].length(); ++j) ans[j] = "";}}// 没有被替换的位置还是保持原样for (int i = 0; i < n; ++i) {if (ans[i] == null) ans[i] = s.substring(i, i + 1);}return String.join("", ans);}
}

2682. 找出转圈游戏输家(模拟)

https://leetcode.cn/problems/find-the-losers-of-the-circular-game/

在这里插入图片描述

提示:
1 <= k <= n <= 50

class Solution {public int[] circularGameLosers(int n, int k) {int[] cnt = new int[n];int l = n;for (int i = 0, s = k; cnt[i] == 0; i = (i + s) % n, s += k) {l--;cnt[i]++;}int[] ans = new int[l];for (int i = 0, j = 0; i < n; ++i) {if (cnt[i] == 0) ans[j++] = i + 1;}return ans;}
}

为方便取模运算,循环中的下标可以从 0 开始,在返回时再加一。

1444. 切披萨的方案数(⭐⭐⭐⭐⭐)

https://leetcode.cn/problems/number-of-ways-of-cutting-a-pizza/
在这里插入图片描述
提示:
1 <= rows, cols <= 50
rows == pizza.length
cols == pizza[i].length
1 <= k <= 10
pizza 只包含字符 'A' 和 '.' 。

解法——从递归到递推到优化(二维前缀和+记忆化搜索)

https://leetcode.cn/problems/number-of-ways-of-cutting-a-pizza/solutions/2392051/ji-bai-100cong-di-gui-dao-di-tui-dao-you-dxz5/

定义 dfs(c, i, j) 表示把左上角在 (i, j),右下角在 (m - 1, n - 1) 的子矩阵切 c 刀,每块都至少包含一个苹果的方案数。

class Solution {static final int MOD = (int)1e9 + 7;int[][][] memo;public int ways(String[] pizza, int k) {MatrixSum ms = new MatrixSum(pizza);int m = pizza.length, n = pizza[0].length();memo = new int[k][m][n];for (int i = 0; i < k; ++i) {for (int j = 0; j < m; ++j) {Arrays.fill(memo[i][j], -1);}}return dfs(k - 1, 0, 0, ms, m, n);}public int dfs(int c, int i, int j, MatrixSum ms, int m, int n) {if (c == 0) {       // 不能再切了,检查是否还剩下苹果return ms.query(i, j, m, n) > 0? 1: 0;} if (memo[c][i][j] != -1) return memo[c][i][j];int res = 0;// 枚举竖直切for (int j2 = j + 1; j2 < n; ++j2) {if (ms.query(i, j, m, j2) > 0) {res = (res + dfs(c - 1, i, j2, ms, m, n)) % MOD;}}// 枚举水平切for (int i2 = i + 1; i2 < m; ++i2) {if (ms.query(i, j, i2, n) > 0) {res = (res + dfs(c - 1, i2, j, ms, m, n)) % MOD;}}return memo[c][i][j] = res;}
}// 二维前缀和模板('A'的ASCII码最低位为1,'.'的ASCII码的最低位为0)
class MatrixSum {private final int[][] sum;public MatrixSum (String[] matrix) {int m = matrix.length, n = matrix[0].length();sum = new int[m + 1][n + 1];for (int i = 0; i < m; ++i) {for (int j = 0; j < n; ++j) {sum[i + 1][j + 1] = (matrix[i].charAt(j) & 1) + sum[i + 1][j] + sum[i][j + 1] - sum[i][j];}}}// 返回左上角为(r1,c1),右下角为(r2-1,c2-1)的子矩阵的元素和public int query(int r1, int c1, int r2, int c2) {return sum[r2][c2] - sum[r2][c1] - sum[r1][c2] + sum[r1][c1];}
}

1388. 3n 块披萨(⭐⭐⭐⭐⭐脑筋急转弯:转换问题)

https://leetcode.cn/problems/pizza-with-3n-slices/
在这里插入图片描述

提示:
1 <= slices.length <= 500
slices.length % 3 == 0
1 <= slices[i] <= 1000

解法——将问题转化为:选择n个披萨,且任意两个数不能相邻,求这n个数的最大值(环形打家劫舍 + 最多买卖k次的股票)

有点像 环形打家劫舍 + 最多买卖k次的股票 的结合。

dp[i][j] 表示考虑 0 ~ i 下标的 slices,购买 j 个最大价值。

class Solution {public int maxSizeSlices(int[] slices) {int n = slices.length;int a = op(slices, 0, n - 2), b = op(slices, 1, n - 1);return Math.max(a, b);}public int op(int[] slices, int start, int end) {int n = end - start + 1, m = (n + 1) / 3;int[][] dp = new int[n][m + 1];for (int i = 0; i < n; ++i) Arrays.fill(dp[i], Integer.MIN_VALUE);dp[0][0] = 0;dp[0][1] = slices[start];dp[1][0] = 0;dp[1][1] = Math.max(slices[start], slices[start + 1]);for (int i = 2; i < n; ++i) {dp[i][0] = 0;for (int j = 1; j <= m; ++j) {dp[i][j] = Math.max(dp[i - 1][j], dp[i - 2][j - 1] + slices[i + start]);}}return dp[n - 1][m];}
}

2235. 两整数相加(真·梦开始的地方)

https://leetcode.cn/problems/add-two-integers/

在这里插入图片描述
提示:
-100 <= num1, num2 <= 100

class Solution {public int sum(int num1, int num2) {return num1 + num2;}
}

2236. 判断根结点是否等于子结点之和(真·梦开始的地方2)

https://leetcode.cn/problems/root-equals-sum-of-children/description/

在这里插入图片描述

提示:
树只包含根结点、左子结点和右子结点
-100 <= Node.val <= 100

class Solution {public boolean checkTree(TreeNode root) {return root.left.val + root.right.val == root.val;}
}

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

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

相关文章

【ag-grid-vue】列定义(Updating Column Definitions)

列定义一节解释了如何配置列。可以在初始设置列之后更改列的配置。本节介绍如何更新列定义。 添加和删除列 可以通过更新提供给网格的列定义列表来添加和删除列。当设置新列时&#xff0c;网格将与当前列进行比较&#xff0c;并计算出哪些列是旧的(要删除)、哪些列是新的(创建…

Linux简介

为什么选择Linux&#xff1f; Linux是一个优秀的操作系统 硬件方面&#xff1a;适合嵌入式&#xff0c;服务器&#xff0c;移动设备&#xff0c;桌面&#xff0c;计算机集群和超级计算机应用方面&#xff1a;人工智能&#xff0c;分布式计算&#xff0c;云计算&#xff0c;大数…

Win7系统电脑开机总出现硬盘自检的简单解决方法

你是不是经常会遇到电脑开机进行硬盘自检&#xff0c;而且每次开机都检查很久不能跳过&#xff1b;怎么才能跳过这一步骤呢&#xff1f;下面教大家如何让Win7系统电脑在开机的时候跳过硬盘自检这一步骤&#xff0c;加快开机时间。 解决步骤&#xff1a; 1、按下“Win R”快捷键…

【前端demo】倒计时器 可选择时间 原生实现

文章目录 效果过程日历与获取时间居中背景与字计时器清空计时器 代码HTMLCSSJS 其他demo 效果 效果预览&#xff1a;倒计时器 可选择时间 (codepen.io) 参考&#xff1a; Simple Clock/Countdown timer (codepen.io) 前端页面实现倒计时效果的几种方法_前端倒计时__Boboy的…

如何使用Puppeteer进行金融数据抓取和预测

导语 Puppeteer是一个基于Node.js的库&#xff0c;可以用来控制Chrome或Chromium浏览器&#xff0c;实现网页操作、截图、PDF生成等功能。本文将介绍如何使用Puppeteer进行金融数据抓取和预测&#xff0c;以及如何使用亿牛云爬虫代理提高爬虫效果。 概述 金融数据抓取是指从…

【Linux】简单的小程序:进度条

在学习进度条之前&#xff0c;需要学一点预备知识。 1. 预备知识 回车换行 现在的换行符&#xff08;\n&#xff09;其实就是回车式换行符&#xff0c;另起一行&#xff0c;光标指向最新一行的开头。回车符&#xff08;\r&#xff09;是光标指向这一行的开头。 缓冲区 &a…

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…

使用gradio库的File模块实现文件上传和生成可下载文件

使用gradio库的File模块实现文件上传和生成可下载文件 文章目录 使用gradio库的File模块实现文件上传和生成可下载文件一、背景二、介绍1、gradio简介2、File模块简介3、tempfile 模块 三、文件上传demo实战1、具体代码2、运行样例 一、背景 在用Gradio设计改写效果审核AI的de…

华为云软件精英实战营——感受软件改变世界,享受Coding乐趣

机器人已经在诸多领域显现出巨大的商业价值&#xff0c;华为云计算致力于以云助端的方式为机器人产业带来全新机会 如果您是开发爱好者&#xff0c;想了解华为云&#xff0c;想和其他自由开发者交流经验&#xff1b; 如果您是学生&#xff0c;想和正在从事软件开发行业的大佬…

使用 Python 和 dash 创建仪表板

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 介绍 在数据科学和分析领域&#xff0c;数据的力量不仅通过提取见解来释放&#xff0c;而且还通过有效地传达这些见解来释放;这就是数据可视化发挥作用的地方。 数据可视化是信息和数据的图形表示。它使用图表、图形和…

PostgreSQL 查询语句大全

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Multimedia-播放器-架构2

目录 引言 问题1&#xff1a; 数据缓冲区 多线程模型 缓冲区的特点&#xff1a; 点播和直播场景中的缓冲区&#xff1a; 问题2&#xff1a; 同步方式 同步实现过程 引言 上一篇梳理了播放器的基本工作与处理流程&#xff0c;本片内容主要梳理一下其中会遇到的问题&am…

《Web安全基础》04. 文件上传漏洞

web 1&#xff1a;文件上传漏洞2&#xff1a;WAF 绕过2.1&#xff1a;数据溢出2.2&#xff1a;符号变异2.3&#xff1a;数据截断2.4&#xff1a;重复数据 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与工具只做简单介绍&#xff0c;其使用另见《安全工具录》…

数据艺术:精通数据可视化的关键步骤

数据可视化是将复杂数据转化为易于理解的图表和图形的过程&#xff0c;帮助我们发现趋势、关联和模式。同时数据可视化也是数字孪生的基础&#xff0c;本文小编带大家用最简单的话语为大家讲解怎么制作一个数据可视化大屏&#xff0c;接下来跟随小编的思路走起来~ 1.数据收集和…

Apifox-比postman更优秀的接口自动化测试平台

一、Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter。通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好 API 文档&#xff0c;API 调试、API 数据 Mock、AP…

UE5打完包后,启动程序不能全屏

最近看到ue5的打包程序后不能默认自动全屏&#xff0c;效果如下&#xff0c;发现并不是全屏的&#xff0c;而且就算点击放大也不是全屏 解决办法&#xff1a;设置如下之后在打包就可以了 但是会一直打印错误的日志&#xff0c;不过这个不影响使用 如果本文对你有帮助&#xff0…

说说CDN和负载均衡具体是怎么实现的

分析&回答 什么是 CDN CDN (全称 Content Delivery Network)&#xff0c;即内容分发网络。 构建在现有网络基础之上的智能虚拟网络&#xff0c;依靠部署在各地的边缘服务器&#xff0c;通过中心平台的负载均衡、内容分发、调度等功能模块&#xff0c;使用户就近获取所需…

stable diffusion实践操作-文生图

本文专门开一节写文生图相关的内容&#xff0c;在看之前&#xff0c;可以同步关注&#xff1a; stable diffusion实践操作 正文 1 liblib SD1.5底模 lora(baihuaniang_1.0) 详细信息&#xff1a; 底模&#xff1a;SD 1.5 Lora:baihuaniang_1.0 正向提示词&#xff1a; Best …

【Python】批量下载页面资源

【背景】 有一些非常不错的资源网站,比如一些MP3资源网站。资源很丰富,但是每一个资源都不大,一个一个下载费时费力,想用Python快速实现可复用的批量下载程序。 【思路】 获得包含资源链接的静态页面,用beautifulsoup分析页面,获得所有MP3资源的实际地址,然后下载。…

数学建模:灰色预测模型

&#x1f506; 文章首发于我的个人博客&#xff1a;欢迎大佬们来逛逛 数学建模&#xff1a;灰色预测模型 文章目录 数学建模&#xff1a;灰色预测模型灰色预测算法步骤代码实现 灰色预测 三个基本方法&#xff1a; 累加数列&#xff1a;计算一阶累加生成数列 x ( 1 ) ( k ) …