- 博客(30)
- 收藏
- 关注
原创 从递归到记忆化搜索再到动态规划
思路:长度为N的数组,第一个分割位置在i位置时的平均值假设为avg, 剩余N - i长度的数组分割为k - 1个相邻子数组的最大分数平均值为cur。遍历数组中每一个i所在的位置,同时更新最大值avg + cur。
2022-11-28 22:11:16
162
原创 环绕字符串中唯一的子字符串
题目描述把字符串 s 看作是 “abcdefghijklmnopqrstuvwxyz” 的无限环绕字符串,所以 s 看起来是这样的:“…zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd…” .现在给定另一个字符串 p 。返回 s 中 唯一 的 p 的 非空子串 的数量 。思路由于 s 是周期字符串,对于在 s 中的子串,只要知道子串的第一个字符(或最后一个字符)和子串长度,就能确定这个子串。例如子串以 d 结尾,长
2022-05-25 23:10:52
130
原创 为高尔夫比赛砍树2022-05-23每日一题 hard
题目描述你被请来给一个要举办高尔夫比赛的树林砍树。树林由一个 m x n 的矩阵表示, 在这个矩阵中:0 表示障碍,无法触碰1 表示地面,可以行走比 1 大的数 表示有树的单元格,可以行走,数值表示树的高度每一步,你都可以向上、下、左、右四个方向之一移动一个单位,如果你站的地方有一棵树,那么你可以决定是否要砍倒它你需要按照树的高度从低向高砍掉所有的树,每砍过一颗树,该单元格的值变为 1(即变为地面)。你将从 (0, 0) 点开始工作,返回你砍完所有树需要走的最小步数。 如果你无法砍完所有的树
2022-05-25 22:52:35
206
原创 乘法表中第k小的数 2022-05-18每日一题(hard)
几乎每一个人都用 乘法表。但是你能在乘法表中快速找到第k小的数字吗?给定高度m 、宽度n 的一张 m * n的乘法表,以及正整数k,你需要返回表中第k 小的数字。思路由于 m , n 太大,所以放弃使用暴力法,会超时使用二分来做思路来源: https://leetcode.cn/problems/kth-smallest-number-in-multiplication-table/solution/by-fuxuemingzhu-8eq4/分析: 在 [1, m * n] 使用二分法来.
2022-05-18 23:34:12
87
原创 贴纸问题 2020-5-14日每日一题
题目描述我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。您想要拼写出给定的字符串 target ,方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意,你可以多次使用每个贴纸,每个贴纸的数量是无限的。返回你需要拼出 target 的最小贴纸数量。如果任务不可能,则返回 -1 。注意:在所有的测试用例中,所有的单词都是从 1000 个最常见的美国英语单词中随机选择的,并且 target 被选择为两个随机单词的连接。暴力递归思路: 此题只要求返回最好的贴指数,这与目标字符串的
2022-05-14 22:49:42
415
原创 最小基因变化 2022-05-07 每日一题
题目描述基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是 ‘A’、‘C’、‘G’ 和 ‘T’ 之一。假设我们需要调查从基因序列 start 变为 end 所发生的基因变化。一次基因变化就意味着这个基因序列中的一个字符发生了变化。例如,“AACCGGTT” --> “AACCGGTA” 就是一次基因变化。另有一个基因库 bank 记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。给你两个基因序列 start 和 end ,以及一个基因库 bank ,请你找
2022-05-07 22:21:18
200
原创 回文链表 使用额外空间的方法与空间复杂度为1的方法
题目描述:给定一个链表的 头节点 head ,请判断其是否为回文链表。如果一个链表是回文,那么链表节点序列从前往后看和从后往前看是相同的。方法一:思路: 首先使用快慢指针找到链表中间的节点,之后从中间节点开始依次压栈,直到末尾。最后将栈中的每一个元素弹出和正向遍历链表的元素比较看是否相等,若有一个不相等,则直接返回false。class Solution { public boolean isPalindrome(ListNode head) {
2022-04-30 23:15:10
117
原创 太平洋大西洋水流问题
题目描述有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。这个岛被分割成一个由若干方形单元格组成的网格。给定一个 m x n 的整数矩阵 heights , heights[r][c] 表示坐标 (r, c) 上单元格 高于海平面的高度 。岛上雨水较多,如果相邻单元格的高度 小于或等于 当前单元格的高度,雨水可以直接向北、南、东、西流向相邻单元格。水可以从海洋附近的任何单元格流入海洋。返回网格坐标 re
2022-04-28 23:33:15
133
原创 n个骰子的点数(暴力递归--记忆化搜索--动态规划)
题目描述:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集合中第 i 小的那个的概率示例:输入: 1输出: [0.16667,0.16667,0.16667,0.16667,0.16667,0.16667]输入: 2输出: [0.02778,0.05556,0.08333,0.11111,0.13889,0.16667,0.13889,0.11111,0.0833
2022-04-26 23:26:33
332
原创 随机数索引(使用蓄水池的问题思路)2022/4/25每日一题
题目描述给你一个可能含有 重复元素 的整数数组 nums ,请你随机输出给定的目标数字 target 的索引。你可以假设给定的数字一定存在于数组中。实现 Solution 类:Solution(int[] nums) 用数组 nums 初始化对象。int pick(int target) 从 nums 中选出一个满足 nums[i] == target 的随机索引 i 。如果存在多个有效的索引,则每个索引的返回概率应当相等。蓄水池问题:问题描述: 给出一个数据流,这个数据流的长
2022-04-25 22:57:19
110
原创 树的子结构
题目要求输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。分析将以树A的每一个节点的树和B相比较是不是结构相同/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(in
2022-03-27 21:04:52
44
原创 leetcode 零钱兑换
题目描述给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。你可以认为每种硬币的数量是无限的。链接:https://leetcode-cn.com/problems/coin-change动态规划分析以数组coins= [1,2,5] , amount = 11 为例:构造dp 数组, 大小为dp[amount + 1], 对于 i 位
2022-03-20 21:57:05
209
原创 leetcode打家劫舍3
题目描述小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为 root 。除了 root 之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果 两个直接相连的房子在同一天晚上被打劫 ,房屋将自动报警。给定二叉树的 root 。返回 在不触动警报的情况下 ,小偷能够盗取的最高金额 。链接:https://leetcode-cn.com/problems/house-robber-iii使用二叉树递归套
2022-03-20 21:51:05
591
原创 最佳买卖股票时机含冷冻期(从暴力 到 记忆化搜索 再到 动态规划)
题目描述给定一个整数数组prices,其中第 prices[i] 表示第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。暴力递归分析: 卖出股票后,你无法在第二天买入股票,所以需要是设置一个标志位来表示当前位置应该买入还是卖出。 public int maxProfit(int[]
2022-03-19 23:12:52
405
1
原创 寻找重复数
题目要求给定一个包含 n + 1 个整数的数组 nums ,其数字都在 [1, n] 范围内(包括 1 和 n),可知至少存在一个重复的整数。假设 nums 只有 一个重复的整数 ,返回 这个重复的数 。你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。使用二分查找的思路思路:由于整数数组nums的长度是 n + 1, 而nums[i] 的范围在[1,n] 所以一定存在重复整数。将 1 - n 范围内的数组以中间数字m分为两部分,分别为 (1,m) 与
2022-03-18 23:01:08
269
原创 数组中的第K个最大元素
题目要求给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。暴力法将数组从大到小排序,返回第 k - 1 项元素即为所求public int findKthLargest(int[] nums, int k) { Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);
2022-03-16 14:36:34
304
原创 leetcode课程表
题目描述你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisites[i] = [ai, bi] ,表示如果要学习课程 ai 则 必须 先学习课程 bi 。例如,先修课程对 [0, 1] 表示:想要学习课程 0 ,你需要先完成课程 1 。请你判断是否可能完成所有课程的学习?如果可以,返回 true ;否则,返回 false 。分析
2022-03-15 22:54:46
937
原创 leetcode打家劫舍
题目要求你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。暴力递归由于两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警,所以不可以偷两间相邻的,则可以分解为是否偷当前位置的房屋,即index位置,若偷当前位置则下一次偷的必须是index + 2 位置的
2022-03-14 22:28:06
99
原创 乘积最大子数组
题目要求给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。测试用例的答案是一个 32-位 整数。子数组 是数组的连续子序列。分析本题需要确定子数组在以0位置结尾的情况下向左边推相乘能得到的最大值,子数组在以1位置结尾的情况下向左边推相乘能得到的最大值,子数组在以2位置结尾的情况下向左边推能相乘得到的最大值.,等等现在求子数组在以 i 位置结尾的情况下怎么利用 i - 1位置得到的答案。子数组在以 i 位置
2022-03-14 21:38:38
947
原创 leetcode 单词拆分
题目要求:给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。暴力递归从s的下标0开始,依次判断 s.subString(0,i + 1) 在不在wordDict中,若在时,递归判断s剩余的部分s.substring(i + 1) 是否在wordDict中。递归推出的条件是剩余的s == “”public class WordBreak { p
2022-03-14 21:16:28
140
原创 最长连续序列
题目要求给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。分析:本题要求时间复杂度为o(n),可以使用哈希表的方法解决。首先遍历数组nums,将nums中的元素全部加入到哈希表中。同时当数组为 [100,4,200,1,3,2] 时,以1或2或3或4开始遍历时遍历到的结果应该是一样的,同时为了防止重复遍历,需要记录当前元素被遍历过。所以使用HashMap<Integer,Boo
2022-03-14 20:49:14
683
原创 二叉树展开为链表
题目要求给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。思路:将root的左右子树均拉平将root的左右子树均使用临时变量保存。TreeNode left = root.left;TreeNode right = root.right;将root的左子树挂在root的右指针下,同时将root的左
2022-03-12 22:03:08
552
原创 验证二叉搜索树
问题描述给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也
2022-03-08 23:32:01
342
原创 单词搜索记录
题目要求给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。思路:从board的(0,0)位置出发,依次向上向下向左向右遍历,看遍历到的元素是否和word相应的位置元素相等,在此过程中记录表示word下标的指针index,若index >= wor
2022-03-07 22:31:43
164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人