Java实战-LeetCode一百题
文章平均质量分 82
以实战为线索,深入理解Java程序设计结构。
Code Writers
全栈领域新星创作者,2023年博客之星Top95,阿里云专家博主、星级博主、技术博主,2022博客之星入围,6月城市(成都)之星Top8,2023新星计划潜力新星。
展开
-
Java编程实战22:正方形数组的数目
如果该数组每对相邻元素之和是一个完全平方数,则称这一数组为正方形数组。[1,8,17] 和 [17,8,1] 都是有效的排列。中拥有相同值的节点我们会重复计算。节点出发访问剩余的节点的可行方法数。的正方形排列的数目。不同的充要条件是存在某个索引。的节点,我们令最终答案除以。个节点已经被访问过了。给定一个非负整数数组。输入:[1,17,8]输入:[2,2,2]原创 2022-12-29 16:36:31 · 192 阅读 · 0 评论 -
Java编程实战21:构造字典序最大的合并字符串
长度相同的两个字符串 a 和 b 比较字典序大小,如果在 a 和 b 出现不同的第一个位置,a 中字符在字母表中的出现顺序位于 b 中相应字符之后,就认为字符串 a 按字典序比字符串 b 更大。例如,“abcd” 按字典序比 “abcc” 更大,因为两个字符串出现不同的第一个位置是第四个字符,而 d 在字母表中的出现顺序位于 c 之后。当两个字符相等时,则我们最优选择为后缀较大的字符串,分类讨论如下: 假设。输入:word1 = “cabaa”, word2 = “bcaaa”,此时两个字符串分别从。原创 2022-12-24 11:10:51 · 934 阅读 · 0 评论 -
Java编程实战20:设计一个文本编辑器
【代码】Java编程实战20:设计一个文本编辑器。原创 2022-12-22 15:52:24 · 792 阅读 · 0 评论 -
Java编程实战19:滑动窗口最大值
给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。恰好包含在递推式的第一种情况中,因此无需特殊考虑。都等于分组中的最大值,因此无论窗口属于哪一种情况,个一组进行分组,最后一组中元素的数量可能会不足。它们分别满足如下的递推式。的倍数,那么此时窗口恰好对应一整个分组,输出:[3,3,5,5,6,7]的倍数,那么窗口中的最大值为。返回 滑动窗口中的最大值。原创 2022-12-20 15:57:59 · 700 阅读 · 0 评论 -
Java编程实战18:二叉树的序列化与反序列化
序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。这个递归函数传入两个参数,带解析的字符串和当前当解析的位置 ptr,ptr 之前的位置是已经解析的,ptr 和 ptr 后面的字符串是待解析的。当我们开始解析一个字符串的时候,如果开头是 X,我们就知道这一定是解析一个「空树」的结构,如果开头是 (,我们就知道需要解析。输入:root = [1,2,3,null,null,4,5]原创 2022-12-16 08:55:44 · 134 阅读 · 0 评论 -
Java编程实战17:UTF-8 编码验证
对于 n 字节 的字符 (n > 1),第一个字节的前 n 位都设为1,第 n+1 位设为 0 ,后面字节的前两位一律设为 10。编码时,需要对每个字符的头字节和其余字节分别做判断。的按位与运算结果是否为 0。对于 1 字节 的字符,字节的第一位设为 0 ,后面 7 位为这个符号的 unicode 码。字符的第 1 个字节称为头字节,除了第 1 个字节以外的字节统称为其余字节。这是有效的 utf-8 编码,为一个 2 字节字符,跟着一个 1 字节字符。下一个字节是开头为 10 的延续字节,这是正确的。原创 2022-12-14 14:23:52 · 912 阅读 · 0 评论 -
Java编程实战16:编辑距离
答案是可以的,但是我们知道,操作的顺序是不影响最终的结果的。对于边界情况,一个空串和一个非空串的编辑距离为 D[i][0] = i 和 D[0][j] = j , D[i][0] 相当于对 word1 执行 i 次删除操作, D[0][j] 相当于对 word1 执行 j 次插入操作。我们用 D[i][j] 表示 A 的前 i 个字母和 B 的前 j 个字母之间的编辑距离。如上所述,当我们获得 D[i][j-1] , D[i-1][j] 和 D[i-1][j-1] 的值之后就可以计算出 D[i][j]。原创 2022-12-11 12:09:09 · 133 阅读 · 0 评论 -
Java编程实战15:字符串相乘
给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。相乘的结果 C(x) = A(x) \times B(x) 在 x = 10 处求值。我们把两个数相乘看成是两个多项式相乘,因为任何一个数都可以表示成为。输入: num1 = “123”, num2 = “456”输入: num1 = “2”, num2 = “3”相乘的时候,我们也可以认为这两个数是两个多项式。它们的本质是一样的,并且时间复杂度都是。的形式,也就相当于对多项式。原创 2022-12-10 20:48:07 · 1640 阅读 · 0 评论 -
Java编程实战14:堆叠长方体的最大高度
假设两个长方体 r_1, r_2 的长宽高分别为 (w_1,l_1,h_1) 与 (w_2,l_2,h_2),且满足 w_1 \le w_2,l_1 \le l_2,h_1 \le h_2,此时长方体 r_1 一定可以堆叠在长方体 r_2 之上,此时得到的高度为 h_1 + h_2。输入:cuboids = [[7,11,17],[7,17,11],[11,7,17],[11,17,7],[17,7,11],[17,11,7]]输入:cuboids = [[38,25,45],[76,35,3]]原创 2022-12-10 12:04:15 · 624 阅读 · 0 评论 -
Java编程实战13:第一个错误的版本
你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。输入:n = 5, bad = 4输出:4原创 2022-12-07 11:14:59 · 62 阅读 · 0 评论 -
Java编程实战12:解数独
编写一个程序,通过填充空格来解决数独问题。数独的解法需 遵循如下规则:输入:board =[[“5”,“3”,“.”,“.”,“7”,“.”,“.”,“.”,“.”],[“6”,“.”,“.”,“1”,“9”,“5”,“.”,“.”,“.”],[“.”,“9”,“8”,“.”,“.”,“.”,“.”,“6”,“.”],[“8”,“.”,“.”,“.”,“6”,“.”,“.”,“.”,“3”],[“4”,“.”,“.”,“8”,“.”,“3”,“.”,“.”,“1”],[“7”,“.”,“.”,“.”,“2原创 2022-12-06 17:38:45 · 975 阅读 · 0 评论 -
Java编程实战11:交替打印字符串
设置一个每个线程共有的变量 i ,用来代表当前的数字 将每一个判断并打印的操作,放在一个同步代码块内部,以保证操作的原子性,使得所有操作串行发生 每一个线程内部,当 i 小于等于 n 时,不断的争用同一把锁。当线程得到锁后,判断当前的数字 i 是否满足自身的打印条件,若是则打印,并将 i+1 ,否则放弃这把锁。原创 2022-12-02 20:40:04 · 194 阅读 · 1 评论 -
Java编程实战10:正则表达式匹配
在进行状态转移时,我们考虑 p 的第 j 个字符的匹配情况:如果 p 的第 j 个字符是一个小写字母,那么我们必须在 s 中匹配一个相同的小写字母,即$ f[i][j] = \begin{cases} f[i - 1][j - 1], & s[i] = p[j]\ \text{false}, & s[i] \neq p[j] \end{cases}),那么在进行状态转移时,会先将 a 进行匹配(当 p[j] 为 a 时),再将 a* 作为整体进行匹配(当 p[j] 为 * 时)。‘.’ 匹配任意单个字符。原创 2022-11-26 11:24:30 · 925 阅读 · 4 评论 -
Java编程实战9:统计只差一个字符的子串数目
容易得到,当 s[i] 与 t[j] 不同时, (i, j) 贡献的答案数为:(1+end_{ij})*(1+start_{ij}) 其中end_{ij}表示以s[i-1]与t[j-1]为终点的最长相同后缀的长度,start_{ij}表示以 s[i+1] 与 t[j+1] 为起点的最长相同前缀的长度。如上例中,对于 s[2]为b 和 t[2]为c ,其左侧最长后缀为 aa 长度为2,右侧最长后缀为 a 长度为1, 所以 i=2, j=2 这种情况一共贡献了:(1+2)*(1+1) = 6种答案。原创 2022-11-23 20:53:08 · 432 阅读 · 0 评论 -
Java编程实战8:字符串转整数
目录字符串转整数题目示例 1示例 2示例 3提示解题思路完整代码字符串转整数题目请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。函数 myAtoi(string s) 的算法如下:读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。读入下一个字符,直到到达下一个非数字字符或到达输入的结原创 2022-11-12 13:54:25 · 988 阅读 · 1 评论 -
Java编程实战7:解析布尔表达式
目录解析布尔表达式题目示例 1示例 2示例 3示例 4提示解答解题思路完整代码解析布尔表达式题目给你一个以字符串形式表述的 布尔表达式(boolean) expression,返回该式的运算结果。有效的表达式需遵循以下约定:“t”,运算结果为 True“f”,运算结果为 False“!(expr)”,运算过程为对内部表达式 expr 进行逻辑 非的运算(NOT)“&(expr1,expr2,…)”,运算过程为对 2 个或以上内部表达式 expr1, expr2, … 进行逻辑 与的原创 2022-11-05 17:03:40 · 1251 阅读 · 0 评论 -
Java编程实战6:排序序列
目录排序序列题目示例 1示例 2示例 3提示解答解题思路完整代码排序序列题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:“123”“132”“213”“231”“312”“321”给定 n 和 k,返回第 k 个排列。示例 1输入:n = 3, k = 3输出:“213”示例 2输入:n = 4, k = 9输出:“2314”示例 3输入:n = 3, k = 1输出:原创 2022-10-26 19:09:29 · 469 阅读 · 1 评论 -
Java编程实战5:最小覆盖子串
目录最小覆盖子串题目示例 1示例 2示例 3提示解答解题思路完整代码最小覆盖子串题目给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。注意:对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如果 s 中存在这样的子串,我们保证它是唯一的答案。示例 1输入:s = “ADOBECODEBANC”, t = “ABC”输出:“BANC”示例 2输入:s = “a”原创 2022-10-23 15:38:21 · 153 阅读 · 0 评论 -
Java编程实战4:水果成篮
目录水果成篮题目示例 1示例 2示例 3示例 4提示解答解题思路详细代码水果成篮题目你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必须按照要求采摘水果:你只有 两个 篮子,并且每个篮子只能装 单一类型 的水果。每个篮子能够装的水果总量没有限制。你可以选择任意一棵树开始采摘,你必须从 每棵 树(包括开始采摘的树)上 恰好摘一个水果 。采原创 2022-10-17 20:56:35 · 262 阅读 · 0 评论 -
Java编程实战3:最长有效括号
目录最长有效括号题目示例 1示例 2示例 3提示解答解题思路完整代码最长有效括号题目给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。示例 1输入:s = “(()”输出:2解释:最长有效括号子串是 “()”示例 2输入:s = “)()())”输出:4解释:最长有效括号子串是 “()()”示例 3输入:s = “”输出:0提示0 <= s.length <= 3 * 104s[i] 为 ‘(’ 或 ‘)’解答解题思路原创 2022-10-16 16:33:14 · 496 阅读 · 7 评论 -
Java编程实战2:二叉树建立字符串
目录二叉树建立字符串题目代码二叉树建立字符串题目给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。由题意可知我们要拼接一个字符串,先将根节点拼接生成字符串的规则其实就是在「前序遍历」输出节点值的同时,在每颗子树的左右添加一对 ()(根节点除外),同时需要忽略掉一些不必要的 () 。所谓的不必要就是指当以某个节点原创 2022-10-16 11:16:16 · 226 阅读 · 0 评论 -
Java编程实战1:多线程实现定时器
目录定时器定时器是什么实例深化修改定时器定时器是什么定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码.也就是说定时器有像join和sleep等待功能,不过他们是基于系统内部的定时器,而我们要学习的是在java给我们提供的定时器包装类,用于到了指定时间就执行代码!并且定时器在我们日常开发中十分常用!java给我们提供了专门一个定时器的封装类Timer在java.util包下!Timer定时器Timer类下有一个schedule方法,用于安排指原创 2022-10-15 15:47:37 · 340 阅读 · 0 评论