随笔分类 - Java
使用java编写的程序或者和java有关的题目
摘要:剑指 Offer 24. 反转链表 Offer 24 题目描述: 常规解法 本题的解法很常规,没有其他特别的坑,只需要将链表反转即可。 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/1/26 20:29 *
阅读全文
摘要:剑指 Offer 22. 链表中倒数第k个节点 Offer 22 常规解法 常规解法其实很容易可以想到,只需要先求出链表的长度,然后再次遍历取指定长度的链接即可。 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 202
阅读全文
摘要:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面 Offer 21 这题的解法其实是考察快慢指针和头尾指针。 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/1/26 19:44 */ /** * 题
阅读全文
摘要:剑指 Offer 20. 表示数值的字符串 Offer 20 常规解法: 题目解题思路:需要注意几种情况: 输入的字符串前后可能有任意多个空格,这是合法的。 正负号: (1)正负号只能出现一次。 (2)正负号后面一个字符必须是数字或者小数点。 (3)字符串中最多有两个正负号(正常情况下最多只有一个,
阅读全文
摘要:剑指 Offer 18. 删除链表的节点 Offer 18 本题就是简单的单链表删除节点的题目,需要处理边界的处理以及需要删除的结点是否是头结点。 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/1/25 2
阅读全文
摘要:剑指 Offer 17. 打印从1到最大的n位数 Offer 17 题目解析: 暴力解法 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2021/1/25 16:16 */ public class Offer_17
阅读全文
摘要:剑指 Offer 16. 数值的整数次方 Offer 16 题目解析: 快速幂算法: 时间复杂度分析: 注意:Java 代码中 int32 变量n∈[−2147483648,2147483647] ,因此当 n = -2147483648 时执行 n = -n 会因越界而赋值出错。解决方法是先将 n
阅读全文
摘要:剑指 Offer 15. 二进制中1的个数 Offer 15 题目描述: 方法一:使用1逐位相与的方式来判断每位是否为1 /** * 方法一:使用1逐位与的方法 */ public class Offer_15 { // you need to treat n as an unsigned valu
阅读全文
摘要:剑指 Offer 11. 旋转数组的最小数字 Offer 11 题目描述: 暴力解法:直接遍历整个数组,当后一个元素小于前一个元素则表示找到了最小值。 public class Offer_11 { public int minArray(int[] numbers) { int n = numbe
阅读全文
摘要:剑指 Offer 10- II. 青蛙跳台阶问题 Offer 10- II 题目描述: 动态规划方程: 循环求余: 复杂度分析: package com.walegarrett.offer; import java.util.Map; import java.util.TreeMap; /** *
阅读全文
摘要:剑指 Offer 47. 礼物的最大价值 Offer 47 题目描述: 状态转移方程: 空间复杂度优化: 复杂度分析: package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/12 9:08 */ /** *
阅读全文
摘要:剑指 Offer 42. 连续子数组的最大和 题目链接 状态定义: 设动态规划列表 \(dp\) ,\(dp[i]\) 代表以元素 $4nums[i]$ 为结尾的连续子数组最大和。 为何定义最大和 \(dp[i]\) 中必须包含元素 \(nums[i]\) :保证 \(dp[i]\) 递推到 \(d
阅读全文
摘要:剑指 Offer 19. 正则表达式匹配 题目链接 一. 字符串匹配大致可以分为三种情况: 第一种:正则串的最后一个字符为正常字符,此时根据主串的最后一个字符是否和它相同来判断是否匹配, 如果相同,则看A[N-2]和B[M-2]是否匹配。 第二种:正则串的最后一个字符为【.】表示可以匹配任意一个字符
阅读全文
摘要:剑指 Offer 14- II. 剪绳子 II 题目链接 因为有取模的操作,动态规划中max不能用了,我们观察:正整数从1开始,但是1不能拆分成两个正整数之和,所以不能当输入。 2只能拆成 1+1,所以乘积也为1。 数字3可以拆分成 2+1 或 1+1+1,显然第一种拆分方法乘积大为2。 数字4拆成
阅读全文
摘要:剑指 Offer 14- I. 剪绳子 题目链接 还是343. 整数拆分的官方题解写的更清楚 本题说的将绳子剪成m段,m是大于1的任意一个正整数,也就是必须剪这个绳子,至于剪成几段,每一段多长,才能使得乘积最大,这就是要求解的问题了 ##【解题思路1】动态规划 对于的正整数 n,当 n≥2 时,可以
阅读全文
摘要:剑指 Offer 13. 机器人的运动范围 题目链接 package com.walegarrett.offer; /** * @Author WaleGarrett * @Date 2020/12/9 9:49 */ public class Offer_13 { int m, n; boolea
阅读全文
摘要:剑指 Offer 12. 矩阵中的路径 题目链接 题目类似于迷宫的搜索。 需要注意的是,需要首先判断起始搜索的位置,可能有多个起点,都需要一一尝试。 每轮迭代的时候记得将是否遍历标记数组还原为未遍历的状态。 package com.walegarrett.offer; /** * @Author W
阅读全文
摘要:题目来源 题目链接 题目详情 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 示例 1: 输入: ["CQueue","ap
阅读全文
摘要:剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值。 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下面。 当目标值小于当前位置的值时将col列号--,因为此时目标值一定位于当前列的前面。 最后需要注意
阅读全文
摘要:1052. 爱生气的书店老板 题目链接 package com.walegarrett; /** * @Author WaleGarrett * @Date 2020/12/3 21:17 */ /** * 1052. 爱生气的书店老板 * 题目链接:https://leetcode-cn.com/
阅读全文

浙公网安备 33010602011771号