jz15.二进制中1的个数 发表于 2020-08-14 | 分类于 算法 字数统计: 248 | 阅读时长 ≈ 1 题目描述 题解方法一: 按位与运算第一个方法就是常规方法, 一个数如果&1, 结果就是该数二进制的末位数字, 所以最直观的方法就是让数字和1进行与运算, 然后右移该数, 当把该数字右移成0了, 说明遍历结束 12345678public int hammingWeight(int n) ... 阅读全文 »
jz13.机器人的运动范围 发表于 2020-08-14 | 分类于 算法 字数统计: 360 | 阅读时长 ≈ 2 题目描述 题解这道题可以参考第十二题的方法, 唯一需要注意的是, 机器人只能在连续的区域运动, 不能跳到其他区域 DFS1234567891011121314151617181920212223242526272829303132public class jz13 { int res ... 阅读全文 »
jz12.矩阵中的路径 发表于 2020-08-13 | 分类于 算法 字数统计: 583 | 阅读时长 ≈ 2 题目描述 题解深度优先遍历这道题最直观的思路就是深度优先搜索, 从一个位置出发, 向四周搜索, 寻找到一条合适的道路一直到底. 为了降低时间复杂度, 要对搜索的过程进行剪枝: 如果碰到了边界, 返回false 如果该位置已经搜索过, 返回false 如果该位置与目标字符不匹配, 返回false ... 阅读全文 »
jz10-Ⅱ.青蛙跳台阶问题 发表于 2020-08-13 | 分类于 算法 字数统计: 127 | 阅读时长 ≈ 1 题目描述 题解动态规划这道题理解起来很容易, 运用动态规划的思想, 跳上第n阶台阶, 要么是从n-1阶跳上来的, 要么是从n-2阶跳上来的, 那么将两者相加即可. ![](https://justlxb-pic.oss-cn-shanghai.aliyuncs.com/108249e4d62d429 ... 阅读全文 »
jz09.用两个栈实现队列 发表于 2020-08-13 | 分类于 算法 字数统计: 388 | 阅读时长 ≈ 1 题目描述 题解栈 Java底层是用vector实现栈结构的, 但是而Vector底层是一个Object[]数组,那么就要考虑空间扩容和移位的问题了。 可以使用LinkedList来做Stack的容器,因为LinkedList实现了Deque接口,所以Stack能做的事LinkedList都能做,其本 ... 阅读全文 »
714.买卖股票的最佳时机Ⅵ 发表于 2020-08-12 | 分类于 算法 字数统计: 172 | 阅读时长 ≈ 1 题目描述 题解动态规划虽然增加了交易费用, 但是对于整体的算法思路没有影响, 简单地将其归入买入价格的一部分即可 即dp[i][1]的值为Math.max(dp[i - 1][1], dp[i - 1][0] - prices[i] - fee) 同时要注意初始化时dp[0][1]的值为-price ... 阅读全文 »
309.买卖股票的最佳时机Ⅴ 发表于 2020-08-12 | 分类于 算法 字数统计: 349 | 阅读时长 ≈ 1 题目描述 题解动态规划这道题是第二道股票题的拓展, 在第二道题的基础上增加了冷冻期的设定. 由此持有股票的状态多了一个, 由原来的持有股票和不持有股票添加了一个冷冻期的状态. 状态定义 用dp[i][j]表示在第 i 天 j 状态下所获得的最大收益, 其中: 当j为0: 表示不持股 当j为1: 表示 ... 阅读全文 »
152.乘积最大子数组 发表于 2020-08-12 | 分类于 算法 字数统计: 199 | 阅读时长 ≈ 1 题目描述 题解动态规划之前做过的53题最大子序和与这道题整体思路是一样的, 都是一边遍历这数组, 一边记录当前的最大值, 最后输出. 但是不同点也是难点在于, 因为有负数的存在, 所以最大值与最小值会随时相互转换. 很好理解, 一个数为最大值, 乘上一个负数就会变成最小值, 所以在遍历的过程中还要维 ... 阅读全文 »
53.最大子序和 发表于 2020-08-12 | 分类于 算法 字数统计: 292 | 阅读时长 ≈ 1 题目描述给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例一:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。题解动态规划此题在遍历每个元素时都要考虑当前值与之前 ... 阅读全文 »
474.一和零 发表于 2020-08-12 | 分类于 算法 字数统计: 540 | 阅读时长 ≈ 2 题目描述 题解动态规划这道题是0-1背包问题的应用, 思路根据背包问题来, 想象有一个背包, 它有若干个0和1字符. 对于每个字符串, 都可以选择放或者不放进去, 如果放进去就消耗一部分0和1的数量. 状态定义 对状态dp[i][j][k]的定义为,输入字符串在子区间 [0, i] 能够使用 j 个 ... 阅读全文 »