算法
文章平均质量分 53
LaMole_Ryouji
这个作者很懒,什么都没留下…
展开
-
链表-重排链表
题目给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→…你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:给定链表 1->2->3->4, 重新排列为 1->4->2->3.示例 2:给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.来源:力扣(LeetCode)链接:https原创 2021-04-27 09:06:19 · 165 阅读 · 0 评论 -
链表-翻转链表
题目给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?来源:力扣(LeetCode)原创 2021-04-25 23:13:44 · 254 阅读 · 0 评论 -
链表习题
简单反转链表原创 2021-04-25 23:08:42 · 108 阅读 · 0 评论 -
动态规划---练习题
动态规划—练习题连续子数组的最大和题目输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。示例1:输入: nums = [-2,1,-3,4,-1,2,1,-5,4]输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。提示:1 <= arr.length <= 10^5-100 <= arr[i] <= 100答案class Solution { public原创 2021-04-15 23:30:46 · 459 阅读 · 0 评论 -
双指针 接雨水
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。示例 2:输入:height = [4,2,0,3,2,5]输出:9提示:n == height.length0 <= n &原创 2021-04-11 12:18:06 · 117 阅读 · 0 评论 -
动态规划 鸡蛋掉落
题目给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。请你计算并返回要确定 f 确切的值 的 最小操作次数原创 2021-04-10 19:44:08 · 233 阅读 · 0 评论 -
动态规划 统计全为 1 的正方形子矩阵
题目给你一个 m * n 的矩阵,矩阵中的元素不是 0 就是 1,请你统计并返回其中完全由 1 组成的 正方形 子矩阵的个数。示例 1:输入:matrix =[[0,1,1,1],[1,1,1,1],[0,1,1,1]]输出:15解释:边长为 1 的正方形有 10 个。边长为 2 的正方形有 4 个。边长为 3 的正方形有 1 个。正方形的总数 = 10 + 4 + 1 = 15.示例 2:输入:matrix =[[1,0,1],[1,1,0],[1,1,0原创 2021-04-09 22:32:01 · 276 阅读 · 0 评论 -
动态规划 4键键盘
题目假设你有一个特殊的键盘包含下面的按键:Key 1: (A):在屏幕上打印一个 ‘A’。Key 2: (Ctrl-A):选中整个屏幕。Key 3: (Ctrl-C):复制选中区域到缓冲区。Key 4: (Ctrl-V):将缓冲区内容输出到上次输入的结束位置,并显示在屏幕上。现在,你只可以按键 N 次(使用上述四种按键),请问屏幕上最多可以显示几个 'A’呢?样例 1:输入: N = 3输出: 3解释:我们最多可以在屏幕上显示三个’A’通过如下顺序按键:A, A, A样例原创 2021-04-09 09:09:30 · 840 阅读 · 0 评论 -
动态规划 使序列递增的最小交换次数
题目我们有两个长度相等且不为空的整型数组 A 和 B 。我们可以交换 A[i] 和 B[i] 的元素。注意这两个元素在各自的序列中应该处于相同的位置。在交换过一些元素之后,数组 A 和 B 都应该是严格递增的(数组严格递增的条件仅为A[0] < A[1] < A[2] < … < A[A.length - 1])。给定数组 A 和 B ,请返回使得两个数组均保持严格递增状态的最小交换次数。假设给定的输入总是有效的。示例:输入: A = [1,3,5,4], B = [原创 2021-04-07 09:16:22 · 198 阅读 · 0 评论 -
动态规划 最长重复子数组
题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of-r原创 2021-03-23 23:37:31 · 104 阅读 · 0 评论 -
动态规划 最长回文子序列
题目给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。提示:1 <= s.length <= 1000s 只包含小写英文字母来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/long原创 2021-03-23 09:09:04 · 249 阅读 · 0 评论 -
动态规划 不同的二叉搜索树
题目给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树:来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/unique-binary-search-trees著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。状态转移方程思路二叉树的情况是他的左子树情况 * 右子树情况。dp[i]表示i个节点的时候树可能的原创 2021-03-23 08:31:22 · 110 阅读 · 0 评论 -
动态规划 最长重复子数组
题目给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1]B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1] 。提示:1 <= len(A), len(B) <= 10000 <= A[i], B[i] < 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/maximum-length-of-re原创 2021-03-19 09:20:50 · 175 阅读 · 0 评论 -
动态规划 分割等和子集
题目给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.来源:力扣(LeetCode)链接:https://leetcode-cn.com/原创 2021-03-18 09:10:45 · 564 阅读 · 0 评论 -
动态规划 股票的最大利润
题目假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可能获得的最大利润是多少?示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格。示例 2:输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。限制:0 <=原创 2021-03-10 08:25:13 · 279 阅读 · 0 评论 -
动态规划 完全平方数
题目给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。示例 1:输入:n = 12输出:3解释:12 = 4 + 4 + 4示例 2:输入:n = 13输出:2解释:13 = 4原创 2021-03-08 08:56:26 · 260 阅读 · 1 评论 -
动态规划 最长递增子序列
题目给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。示例 1:输入:nums = [10,9,2,5,3,7,101,18]输出:4解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。示例 2:输入:nums = [0,1,0,3,2,3]输出:4示例 3:输入:nums = [7,7原创 2021-03-04 09:08:57 · 267 阅读 · 1 评论 -
动态规划 零钱兑换(1)
题目给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。你可以认为每种硬币的数量是无限的。示例 1:输入:coins = [1, 2, 5], amount = 11输出:3解释:11 = 5 + 5 + 1示例 2:输入:coins = [2], amount = 3输出:-1示例 3:输入:coins = [1], amount = 0输出:0示原创 2021-03-04 09:07:03 · 232 阅读 · 1 评论 -
动态规划 最长回文子串
题目给你一个字符串 s,找到 s 中最长的回文子串。示例 1:输入:s = “babad”输出:“bab”解释:“aba” 同样是符合题意的答案。示例 2:输入:s = “cbbd”输出:“bb”示例 3:输入:s = “a”输出:“a”示例 4:输入:s = “ac”输出:“a”提示:1 <= s.length <= 1000s 仅由数字和英文字母(大写和/或小写)组成来源:力扣(LeetCode)链接:https://leet原创 2021-03-03 23:09:28 · 152 阅读 · 0 评论 -
动态规划 判断子序列
题目给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, … , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?示例 1:输入:s = “abc”, t = “ahbgdc”输出:true示例 2:输入原创 2021-03-03 08:31:22 · 258 阅读 · 0 评论 -
动态规划 使用最小花费爬楼梯
题目数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15 。示例 2:输入:cos原创 2021-03-01 22:55:21 · 295 阅读 · 0 评论 -
动态规划 买卖股票的最佳时机
题目给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖> 出,最大利润 = 6-1 = 5 。注意原创 2021-03-01 09:34:08 · 216 阅读 · 0 评论 -
面试-动态规划-必刷
爬楼梯最大子序和原创 2021-02-27 16:01:00 · 189 阅读 · 0 评论 -
动态规划 最大子序和
题目给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-1000原创 2021-02-27 15:59:08 · 171 阅读 · 0 评论 -
链表
回文链表/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public boolean isPalindrome(ListNode head) { if (head == null) {原创 2020-10-23 00:27:36 · 89 阅读 · 0 评论 -
dfs常见题目
岛屿的最大面积class Solution { private static final int[][] move = new int[][] {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; private int max = 0; public int maxAreaOfIsland(int[][] grid) { int m = grid.length; int n = grid[0].length; fo原创 2020-10-12 21:52:04 · 193 阅读 · 0 评论 -
动态规划
鸡蛋掉落class Solution { public int superEggDrop(int K, int N) { int[][] dp = new int[K + 1][N + 1]; for (int i = 0; i <= K; i++) { dp[i][0] = 0; dp[i][1] = 1; } for (int i = 1; i <= N; i++) {原创 2020-10-11 09:50:16 · 146 阅读 · 0 评论 -
快速排序 && 二分查找
颜色分类class Solution { public void sortColors(int[] nums) { int len = nums.length; if (len < 2) { return; } //[0, left) 0 // [left, right) 1 // [right, nums.length) 2 int left = 0;原创 2020-10-07 19:33:14 · 168 阅读 · 0 评论 -
树相关
相同的树/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right)原创 2020-10-06 20:28:18 · 140 阅读 · 0 评论 -
BFS
二叉树的最小深度/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public int minDepth(TreeNode root) { int r原创 2020-10-06 09:11:40 · 167 阅读 · 0 评论