算法
疯狂的哈哈哈
这个作者很懒,什么都没留下…
展开
-
动态规划之整数拆分
LeetCode地址:整数拆分给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。说明: 你可以假设 n 不小于 2 且不大于 58。方法一 动态规划1.确定dp数组dp[i]是指第i个数将其拆分为至少两个正整数的和,并且使得这些整数的原创 2021-08-12 10:11:58 · 625 阅读 · 0 评论 -
动态规划之使用最小花费爬楼梯
LeetCode地址:使用最小花费爬楼梯数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。示例 1:输入:cost = [10, 15, 20]输出:15解释:最低花费是从 cost[1] 开始,然后走两步即可到阶梯顶,一共花费 15原创 2021-08-11 23:25:51 · 198 阅读 · 0 评论 -
动态规划之不同路径 II
LeetCode地址:不同路径 II一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。从左上原创 2021-08-11 23:12:50 · 117 阅读 · 0 评论 -
动态规划之不同路径
LeetCode地址:不同路径一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1图示:示例1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 ->原创 2021-08-11 22:39:16 · 312 阅读 · 0 评论 -
动态规划之爬楼梯
LeetCode地址:爬楼梯假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。 - 1 阶 + 1 阶 + 1 阶 - 1 阶 + 2 阶 - 2 阶 + 1 阶第一种方法 动态规划1.确定dp数组原创 2021-08-11 17:03:25 · 398 阅读 · 0 评论 -
动态规划系列之斐波那契数
LeetCode地址:斐波那契数斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0) = 0,F(1) = 1F(n) = F(n - 1) + F(n - 2),其中 n > 1给你 n ,请计算 F(n) 。示例 1:输入:2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:3输出:2解释:F(3) = F(2) + F(1) =原创 2021-08-11 15:45:09 · 275 阅读 · 0 评论 -
等差数列划分
LeetCode地址:等差数列划分如果一个数列 至少有三个元素 ,并且任意两个相邻元素之差相同,则称该数列为等差数列。例如,[1,3,5,7,9]、[7,7,7,7] 和 [3,-1,-5,-9] 都是等差数列。给你一个整数数组 nums ,返回数组 nums 中所有为等差数组的 子数组 个数。子数组 是数组中的一个连续序列。示例 1:输入:nums = [1,2,3,4]输出:3解释:nums 中有三个子等差数组:[1, 2, 3]、[2, 3, 4] 和 [1,2,3,4] 自身。原创 2021-08-10 10:43:39 · 267 阅读 · 0 评论 -
剑指 Offer 09. 用两个栈实现队列
LeetCode地址:剑指 Offer 09. 用两个栈实现队列用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1: 输入:["CQueue","appendTail","deleteHead","deleteHead"][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:原创 2021-08-09 20:27:43 · 61 阅读 · 0 评论 -
剑指 Offer 07. 重建二叉树
LeetCode地址:剑指 Offer 07. 重建二叉树输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。示例 1:Input: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]Output: [3,9,20,null,null,15,7]示例 2:Input: preorder = [-1], inorder = [-1]Output: [-1]限制:0 &l原创 2021-08-06 17:21:40 · 74 阅读 · 0 评论 -
剑指 Offer 06. 从尾到头打印链表
LeetCode地址:剑指 Offer 06. 从尾到头打印链表输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]限制:0 <= 链表长度 <= 10000-第一种解法 栈因为是从尾到头的打印链表,所以将链表进行翻转然后依次从头打印结果就是原本链表的从尾到头打印了,但是通常来说打印操作是只读的,所以我们都不希望在打印的时候修改原本的内容,而最后一个遍历到的节点第一个输出,这就是一个典型的“后进原创 2021-08-06 15:55:42 · 69 阅读 · 0 评论 -
剑指 Offer 05. 替换空格
LeetCode地址:剑指 Offer 05. 替换空格请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”限制:0 <= s 的长度 <= 10000第一种方法 遍历添加在Java种字符串String在声明变量后是不可变的,即如果需要对字符串进行修改增加操作都需要重新申请一个新的字符串变量,进而出现了可变长度的字符串StringBuffer和StringB原创 2021-08-06 11:46:30 · 65 阅读 · 0 评论 -
剑指 Offer 04. 二维数组中的查找
LeetCode地址:剑指 Offer 04. 二维数组中的查找在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[ [1, 4, 7, 11, 15], [2, 5, 8, 12, 19], [3, 6, 9, 16, 22], [10, 13, 14, 17, 24], [18, 2原创 2021-08-05 12:02:25 · 188 阅读 · 0 评论 -
剑指Offer03.数组中重复的数字
找出数组中重复的数字。题目描述在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 1:输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3限制:2 <= n <= 100000第一种解法先把输入的数组排序,之后从排序的数组种找出重复的数字时间复杂度 O(nlogn) 空间复杂度O(1)public int find原创 2021-08-04 20:20:13 · 93 阅读 · 0 评论 -
两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> ...原创 2019-11-23 21:12:59 · 220 阅读 · 0 评论 -
整数反转
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。这道题不像以前的题那样是完...原创 2019-09-10 14:12:56 · 179 阅读 · 0 评论