-
Notifications
You must be signed in to change notification settings - Fork 1
Open
Description
动态规划
动态规划问题是笔试常见题,看似很难,但其实只要多训练,就会发现这些题其实都有套路。据说小学生编程训练就已经做到动态规划了呢。 以下四道动态规划题选自leetcode中文社区中级算法动态规划一章。
跳跃游戏
给定一个非负整数数组,你最初位于数组的第一个位置。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个位置。
示例1
输入:[2,3,1,1,4]
输出:true
解释:从位置0到1跳1步,然后跳3步到达最后一个位置。
示例2
输入:[3,2,1,0,4]
输出:false
解释:无论怎样,你总会到达索引为3的位置,但该位置的最大跳跃长度是0。所以你永远不可能到达最后一个位置。
不同路径
一个机器人位于一个m x n网格的左上角(起始点在下图中标记位“Start”)。
机器人每次只能向下或者向右移动一步。机器人试图到达网格的右下角(在下图中标记位“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明: m和n的值均不超过100。
示例1:
输入:m = 3, n = 2
输出:3
解释:
从左上角开始,总共有3条路径可以到达右下角。
1. 向右 - 向右 - 向下
2. 向右 - 向下 - 向右
3. 向下 - 向右 - 向右
示例2:
输入:m = 7, n = 3
输出:28
零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。
示例1:
输入:coins = [1, 2, 5], amount = 11
输出:3
解释:11 = 5 + 5 + 1
示例2:
输入:coins = [2], amount = 3
输出:-1
说明:
你可以认为每种硬币的数量是无限的。
Longest Increasing Subsequence这题它没翻译
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。
说明:
- 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
- 你算法的时间复杂度应该为 O(n2) 。
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
Metadata
Metadata
Assignees
Labels
No labels
