动态规划
Charles.zhang
朝闻道,夕死可矣。路漫漫其修远兮,吾将上下而求索。
展开
-
lintcode练习- 111. 爬楼梯
111. 爬楼梯假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部?样例比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法返回 3解题思路:很经典的动态规划问题,第一阶只有1, 第二阶有1+1, 2两种,第三阶就有 1,1,1; 1,2;2,1三种,第四阶有2+3 =5种,依次类推,可以找出彼此之间的关系为...原创 2018-08-19 21:09:08 · 595 阅读 · 0 评论 -
lintcode练习-108. 分割回文串 II
108. 分割回文串 II给定一个字符串s,将s分割成一些子串,使每个子串都是回文。返回s符合要求的的最少分割次数。样例比如,给出字符串s = "aab",返回 1, 因为进行一次分割可以将字符串s分割成["aa","b"]这样两个回文子串解题思路:class Solution: """ @param s: A string @return: ...原创 2018-08-21 15:59:41 · 597 阅读 · 0 评论 -
lintcode练习- 116. 跳跃游戏
116. 跳跃游戏给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。样例A = [2,3,1,1,4],返回 true.A = [3,2,1,0,4],返回 false.注意事项这个问题有两个方法,一个是贪心和 动态规划。贪心方法时间复杂度为O(N)。动态...原创 2018-08-21 16:31:37 · 227 阅读 · 0 评论 -
lintcode练习 - 392. 打劫房屋
392. 打劫房屋假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且 当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱, 算一算,如果今晚去打劫,你最多可以得到多少钱 在不触动报警装置的情况下。样例给定 [3, 8, 4], 返回 8.挑战O...原创 2018-08-21 16:44:36 · 218 阅读 · 0 评论 -
lintcode练习 - 42. 最大子数组 II
42. 最大子数组 II给定一个整数数组,找出两个 不重叠 子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。样例给出数组 [1, 3, -1, 2, -1, 2]这两个子数组分别为 [1, 3] 和 [2, -1, 2] 或者 [1, 3, -1, 2] 和 [2],它们的最大和都是 7挑战要求时间复杂度为 O(n)注意事项子数组...原创 2018-09-04 08:56:51 · 257 阅读 · 0 评论 -
lintcode练习 - 191. 乘积最大子序列
191. 乘积最大子序列找出一个序列中乘积最大的连续子序列(至少包含一个数)。样例比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。解题思路:因为乘积如果为负,就变成最小的值,再乘一个负数,就变成最大的值了,所以我们记录最小值和最大值。class Solution: """ @param nums: An array of...原创 2018-08-29 18:12:20 · 290 阅读 · 0 评论 -
lintcode练习 - 43. 最大子数组 III
43. 最大子数组 III给定一个整数数组和一个整数 k,找出 k 个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。样例给出数组 [-1,4,-2,3,-2,3] 以及 k = 2,返回 8注意事项子数组最少包含一个数解题思路:只能做到 O(nk) 时间。两个数组分别记录包含当前值的本地最优解和全局最优解。local[i...原创 2018-09-04 09:45:03 · 426 阅读 · 0 评论 -
lintcode练习-45. 最大子数组差
45. 最大子数组差给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。返回这个最大的差值。样例给出数组[1, 2, -3, 1],返回 6挑战时间复杂度为O(n),空间复杂度为O(n)注意事项子数组最少包含一个数class Solution: """ @param nums: A ...原创 2018-09-04 11:00:51 · 251 阅读 · 0 评论 -
lintcode练习 - 395. 硬币排成线 II
395. 硬币排成线 II有 n 个不同价值的硬币排成一条线。两个参赛者轮流从左边依次拿走 1 或 2 个硬币,直到没有硬币为止。计算两个人分别拿到的硬币总价值,价值高的人获胜。请判定 第一个玩家 是输还是赢?样例给定数组 A = [1,2,2], 返回 true.给定数组 A = [1,2,4], 返回 false.解题思路:定义一个只有三位的一位数组。从后面往前算,...原创 2018-08-29 19:45:08 · 474 阅读 · 0 评论 -
lintcode练习 - 436. 最大正方形
436. 最大正方形在一个二维01矩阵中找到全为1的最大正方形样例1 0 1 0 01 0 1 1 11 1 1 1 11 0 0 1 0返回 4解题思路: class Solution: """ @param matrix: a matrix of 0 and 1 @return: an integer """ de...原创 2018-08-29 20:31:39 · 306 阅读 · 0 评论 -
lintcode练习 - 89. K数之和
89. K数之和给定 n 个不同的正整数,整数 k(k <= n)以及一个目标数字 target。 在这 n 个数里面找出 k 个数,使得这 k 个数的和等于目标数字,求问有多少种方案?样例给出 [1,2,3,4],k=2, target=5,[1,4] 和 [2,3] 是 2 个符合要求的方案,返回 2。class Solution: """ @para...原创 2018-09-08 19:17:00 · 563 阅读 · 0 评论 -
lintcode练习 - 91. 最小调整代价
91. 最小调整代价给一个整数数组,调整每个数的大小,使得相邻的两个数的差不大于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少。样例对于数组[1, 4, 2, 3]和target=1,最小的调整方案是调整为[2, 3, 2, 3],调整代价之和是2。返回2。注意事项你可以假设数组中每个整数都是正整数,且小于等于100。解题思路:...原创 2018-09-09 15:52:39 · 519 阅读 · 0 评论 -
lintcode练习-903. 范围加法
描述假设你有一个长度为n的数组,数组的所有元素初始化为0,并且给定k个更新操作。每个更新操作表示为一个三元组:[startIndex, endIndex, inc]。这个更新操作给子数组 A[startIndex ... endIndex](包括startIndex和endIndex)中的每一个元素增加 inc。返回执行k个更新操作后的新数组。您在真实的面试中是否遇到过这个题? ...转载 2018-10-31 17:43:18 · 367 阅读 · 0 评论 -
lintcode练习-164. 不同的二叉查找树 II
164. 不同的二叉查找树 II给出n,生成所有由1...n为节点组成的不同的二叉查找树样例给出n = 3,生成所有5种不同形态的二叉查找树:1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ ...原创 2018-08-28 16:57:16 · 333 阅读 · 0 评论 -
lintcode练习-163. 不同的二叉查找树
163. 不同的二叉查找树给出 n,问由 1...n 为节点组成的不同的二叉查找树有多少种?样例给出n = 3,有5种不同形态的二叉查找树:1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / ...原创 2018-08-28 16:30:29 · 258 阅读 · 0 评论 -
lintcode练习 - 94. 二叉树中的最大路径和
94. 二叉树中的最大路径和给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)样例给出一棵二叉树: 1 / \ 2 3 返回 6解题思路:找二叉树中的最大路径和,首先要考虑清楚是从上往下找,还是从下往上找,通过观察树的结构, 我们发现从下到上最好找。如果从下往...原创 2018-08-21 13:17:39 · 998 阅读 · 0 评论 -
lintcode练习 - 669. 换硬币
669. 换硬币给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1.样例给出 coins = [1, 2, 5], amount = 11返回 3 (11 = 5 + 5 + 1)给出 coins = [2], amount = 3返回 -1注意事项你可以假设每种硬币均...原创 2018-08-22 16:32:51 · 716 阅读 · 0 评论 -
lintcode练习 - 279. 凑 N 分钱的方案数
279. 凑 N 分钱的方案数给你无限多个的 25 分,10 分,5 分和 1 分的硬币。问如果要凑出 n 分钱有多少种不同的方式?样例给出 n = 1111 = 1 + 1 + 1... + 1 = 1 + 1 + 1 + 1 + 1 + 1 + 5 = 1 + 5 + 5 = 1 + 10返回 4。class Solution: """...原创 2018-08-22 17:40:16 · 394 阅读 · 0 评论 -
lintcode练习- 109. 数字三角形
109. 数字三角形给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。注意事项如果你只用额外空间复杂度O(n)的条件下完成可以获得...原创 2018-08-20 09:33:19 · 207 阅读 · 0 评论 -
lintcode练习- 110. 最小路径和
110. 最小路径和给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 注意事项你在同一时间只能向下或者向右移动一步解题思路:[[1, 3, 5, 7, 9], [5, 2,8,5,1], [4,4,7,2,3], [3,6,6,1,1], [2,8,5,0,4]]1、假设上面为m*n的网格,因为只能向下或者向右,所以第一行和...原创 2018-08-20 10:03:10 · 486 阅读 · 0 评论 -
lintcode练习- 114. 不同的路径
114. 不同的路径有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?样例给出 m = 3 和 n = 3, 返回 6.给出 m = 4 和 n = 5, 返回 35.注意事项n和m均不超过100解题思路:如代码注释class Solution: """ ...原创 2018-08-20 10:15:39 · 246 阅读 · 0 评论 -
lintcode练习-115. 不同的路径 II
115. 不同的路径 II"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。样例如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角。注意事项m 和 n 均不超过100解题思路:如注...原创 2018-08-20 10:25:43 · 287 阅读 · 0 评论 -
lintcode练习 - 514. 栅栏染色
514. 栅栏染色我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。样例n = 3, k = 2, return 6 post 1, post 2, post 3way1 0 0 1 way2 0 1 0way3 ...原创 2018-08-20 11:43:08 · 335 阅读 · 0 评论 -
lintcode练习 - 943. Range Sum Query - Immutable
943. Range Sum Query - ImmutableGiven an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.样例Given nums = [-2, 0, 3, -5, 2, -1]sumRange(0, 2) -> 1...原创 2018-08-20 12:08:34 · 157 阅读 · 0 评论 -
lintcode练习- 76. 最长上升子序列
76. 最长上升子序列给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。样例给出 [5,4,1,2,3],LIS 是 [1,2,3],返回 3给出 [4,2,4,5,3,7],LIS 是 [2,4,5,7],返回 4挑战要求时间复杂度为O(n^2) 或者 O(nlogn)说明最长上升子序列的定义:最长上升子序列问题是在一个无序的给定序列中找到一个尽...原创 2018-08-20 15:54:53 · 189 阅读 · 0 评论 -
lintcode练习- 119. 编辑距离
119. 编辑距离给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。你总共三种操作方法: 插入一个字符 删除一个字符 替换一个字符 样例给出 work1="mart" 和 work2="karma"返回 3 解题思路:分析:采用动态规划解题,初始化dp字典,dp=[(i-n, j-n), (i, j) ],dp[(i,...原创 2018-08-28 14:48:57 · 405 阅读 · 0 评论 -
lintcode练习-125. 背包问题 II
125. 背包问题 II给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大?样例对于物品体积[2, 3, 5, 7]和对应的价值[1, 5, 2, 4], 假设背包大小为10的话,最大能够装入的价值为9。挑战O(n x m) memory is acceptable, can you do it in O(m) memory?...原创 2018-08-28 15:40:21 · 226 阅读 · 0 评论 -
lintcode练习 - 77. 最长公共子序列
77. 最长公共子序列给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。样例给出"ABCD" 和 "EDCA",这个LCS是 "A" (或 D或C),返回1给出 "ABCD" 和 "EACB",这个LCS是"AC"返回 2说明最长公共子序列的定义:最长公共子序列问题是在一组序列(通常2个)中找到最长公共子序列(注意:不同于子串,LCS不需要是连续的原创 2018-08-21 11:13:29 · 343 阅读 · 0 评论 -
lintcode练习-4. 丑数 II
https://www.lintcode.com/problem/ugly-number-ii/my-submissions设计一个算法,找出只含素因子2,3,5的第n小的数。符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...样例样例 1:输入:9输出:10样例 2:输入:1输出:1挑战要求时间复杂度为 O(nl...原创 2019-03-21 12:42:01 · 273 阅读 · 0 评论