![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
微拂素罗衫
一个不喜欢独处却常常不得不一个人的大金牛
展开
-
leetcode #264 丑数 II | 刷题之路第二站——动态规划类问题
题号 264题目描述编写一个程序,找出第n个丑数。丑数就是质因数只包含2, 3, 5的正整数。示例:输入: n = 10输出: 12解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。说明:1是丑数。 n不超过1690。解题思路一——暴力法【超出时间限制】采用哈希表 unum 存储目前已经找到的丑数,key是丑数的值,value是标识该丑数是第几个。对于第 1 个 ~ 第 5 个丑数直接存入哈希表 un...原创 2020-08-15 16:35:16 · 182 阅读 · 0 评论 -
leetcode #221 最大正方形 | 刷题之路第二站——动态规划类问题
题号 221题目描述在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。示例:输入: 1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0输出: 4解题思路——动态规划使用数组 dp[ i ][ j ] 表示以元素 ( i, j ) 为右下角,且只包含 1 的正方形的边长的最大值 。(1)对于第一行和第一列元素而言,以该元素为右小角的正方形只包含该元素自己,所以: 当 i == 0 或者...原创 2020-08-13 17:53:36 · 264 阅读 · 0 评论 -
leetcode #213 打家劫舍 II | 刷题之路第二站——动态规划类问题
此题是leetcode #198 打家劫舍 | 刷题之路第二站——动态规划类问题的改进,在原有基础上,将线性队列改成了环形队列。题号 213题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。...原创 2020-08-12 11:39:07 · 139 阅读 · 0 评论 -
leetcode #198 打家劫舍 | 刷题之路第二站——动态规划类问题
题号 198题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。 偷窃到的最高金额 = 1 + 3 = .原创 2020-08-12 10:31:07 · 165 阅读 · 0 评论 -
leecode #152 乘积最大子数组 | 刷题之路第二站——动态规划类问题
题号 152题目描述给你一个整数数组nums,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。示例1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。解题思路一——暴力法对于给定数组 nums 中的每个元素 nums[ i ],分别计算:nums[ 0 ] ~ nums...原创 2020-08-11 18:48:27 · 118 阅读 · 0 评论 -
leetcode #139 单词拆分 | 刷题之路第二站——动态规划类问题
题号 139题目描述给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。 你可以假设字典中没有重复的单词示例1:输入: s = "leetcode", wordDict = ["leet", "code"]输出: true解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例2:输入: s = "applepen...原创 2020-08-10 14:40:08 · 211 阅读 · 0 评论 -
leetcode #121 买卖股票的最佳时机 | 刷题之路第二站——动态规划类问题
题号 121题目描述给定一个数组,它的第i个元素是一支给定股票第i天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。注意:你不能在买入股票前卖出股票。示例1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。 注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你...原创 2020-08-10 09:47:00 · 115 阅读 · 0 评论 -
leetcode #120 三角形最小路径和 | 刷题之路第二站——动态规划类问题
题号 120题目描述给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 + 1的两个结点。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最说明:如果你可以只使用O(n)的额外空间(n为三角形的总行数)来解决这个问题,那么你的算法会很加分。小路径和为11(即,2+3+5...原创 2020-08-07 13:31:56 · 214 阅读 · 0 评论 -
leetcode #96 不同的二叉搜索树 | 刷题之路第二站——动态规划类问题
题号 96题目描述给定一个整数n,求以1 ...n为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 ...原创 2020-04-15 18:20:19 · 119 阅读 · 0 评论 -
leetcode #91 解码方法 | 刷题之路第二站——动态规划类问题
题号 91题目描述一条包含字母A-Z的消息通过以下方式进行了编码:'A' -> 1'B' -> 2...'Z' -> 26示例1:输入: "12"输出: 2解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。示例2:输入: "226"输出: 3解释: 它可以解码为 "BZ" (2 26), "VF" (22 6), 或...原创 2020-04-13 18:41:42 · 130 阅读 · 0 评论 -
leetcode #70 爬楼梯 | 刷题之路第二站——动态规划类相关问题
题号70问题描述假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定n是一个正整数。示例1:输入: 2输出: 2解释: 有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例2:输入: 3输出: 3解释: 有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 ...原创 2020-04-13 11:09:22 · 156 阅读 · 0 评论 -
leetcode #64 最小路径和 | 刷题之路第二站——动态规划类问题
题号 64题目描述给定一个包含非负整数的mxn网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小说明:每次只能向下或者向右移动一步。示例:输入:[ [1,3,1], [1,5,1], [4,2,1]]输出: 7解释: 因为路径 1→3→1→1→1 的总和最小。链接:leetcode #64 最小路径和解题思路——动态规...原创 2020-04-12 21:48:37 · 211 阅读 · 0 评论 -
leetcode #63 不同路径 II | 刷题之路第二站——动态规划类问题
题号 63题目描述一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用1和0来表示。说明:m和n的值均不超过 100。示例:...原创 2020-04-12 00:13:52 · 333 阅读 · 0 评论 -
leetcode #62 不同路径 | 刷题之路第二站——动态规划类问题
题号 62题目描述一个机器人位于一个m x n网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?例如,上图是一个7 x 3 的网格。有多少可能的路径?示例1:输入: m = 3, n = 2输出: 3解释:从左上角开始,总共有...原创 2020-03-21 18:13:25 · 205 阅读 · 0 评论 -
leetcode #53 最大子序和 | 刷题之路第二站——动态规划类问题
题号 53题目描述给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。链接:leetcode #53 最大子序和解题思路1——暴力法1- 设定两个指针 : maxSub...原创 2020-03-20 10:54:15 · 144 阅读 · 0 评论 -
leetcode #5 最长回文子串【暴力法、动态规划、Manacher算法】 | 刷题之路第二站——动态规划类问题
题号 5题目描述给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为 1000。示例1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例2:输入: "cbbd"输出: "bb"链接:leetcode #5 最长回文子串解题思路1——暴力法1- 找出给定字符串的所有子串2- 按照子串的长...原创 2020-03-08 12:08:56 · 224 阅读 · 0 评论 -
【算法详解】KMP算法——主串与模式串的匹配问题
一、KMP算法的算法思想位置 0 1 2 3 4 5 6 7 8 9 10 主串 a b b a a b b a a b a 模式串 a b b a a b a 我们想要...原创 2020-03-06 22:52:52 · 4545 阅读 · 0 评论 -
【算法详解及经典例题】动态规划算法(Dynamic Programming)——装配线调度问题、矩阵连乘问题
动态规划算法(Dynamic Programming)——从入门到精(fang)通(qi)一、动态规划方法的基本步骤1- 描述问题的最优解(optimal solution)结构特征;2- 递归定义最优解值;3- 自底向上计算最优解值;4- 从已计算得到的最优解值信息中构造最优解。二、动态规划的要素1、最优子结构性质(1)重要性 所解问题必须具有最...原创 2020-03-02 11:52:04 · 848 阅读 · 0 评论 -
leetcode #34 在排序数组中查找元素的第一个和最后一个位置 | 刷题之路第一站——数组类相关问题
题号 34题目描述给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。如果数组中不存在目标值,返回 [-1, -1]。示例 1:输入: nums = [5,7,7,8,8,10], target = 8输出: [3,4]示例 2:输入: nums = [5,7,7,8...原创 2020-02-28 22:11:16 · 183 阅读 · 0 评论 -
leetcode #33 搜索旋转排序数组 | 刷题之路第一站——数组类相关问题
题号 33题目描述假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。示例 1:输入: nums = [4,5,6,7,0...原创 2020-02-27 22:38:02 · 181 阅读 · 0 评论 -
leetcode #31 下一个排列 | 刷题之路第一站——数组类相关问题
【谁能想到我已经八天没有刷力扣了orz……】题号 31题目描述实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,...原创 2020-02-26 23:38:56 · 87 阅读 · 0 评论 -
leetcode #27 移除元素 | 刷题之路第一站——数组类相关问题
题号 27题目描述给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 num...原创 2020-02-18 12:47:26 · 98 阅读 · 0 评论 -
leetcode #26 删除排序数组中的重复项 | 刷题之路第一站——数组类相关问题
题号 26题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。...原创 2020-02-18 09:58:50 · 119 阅读 · 0 评论 -
leetcode #18 四数之和 | 刷题之路第一站——数组类相关问题
题号 18题目描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求...原创 2020-02-17 12:00:57 · 145 阅读 · 0 评论 -
leetcode #16 最接近的三数之和 | 刷题之路第一站——数组类相关问题
题号 16题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).链接:lee...原创 2020-02-17 09:27:46 · 146 阅读 · 0 评论 -
leetcode #15 三数之和 | 刷题之路第一站——数组类相关问题
题号 15题目描述给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]链接...原创 2020-02-12 20:29:07 · 309 阅读 · 0 评论 -
leetcode #11 盛最多水的容器 | 刷题之路第一站——数组类相关问题
题号 11题目描述给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器...原创 2020-02-05 22:56:30 · 175 阅读 · 0 评论 -
leetcode #1 两数之和 | 刷题之路第一站——数组类相关问题
题号 1题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]...原创 2020-02-03 18:36:09 · 117 阅读 · 0 评论 -
【算法-分治策略应用】循环赛日程表问题
一、分治策略基本思想1、Divide将原始问题划分或者归结为规模较小的子问题(多数情况下是划分成2个)2、Conquer递归或迭代求解每个子问题3、Combine将子问题的解综合得到原问题的解注意:1、子问题与原始问题性质完全一样2、子问题之间可彼此独立地求解3、递归停止时子问题可直接求解比较典型的应用例子是“归并排序法”和“快速排序法”,详细可原创 2017-11-15 14:52:22 · 2241 阅读 · 0 评论