摘要:
题目描述 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 。 示例 1: 示例 2: 解题思路 自顶向下找一下规律 状态转移方程 自底向上解决问题 其中 F(0) = 0 Java 实现 心 阅读全文
摘要:
题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 问总共有多少条不同的路径? 例如,上图是一个7 x 3 的网格。有多少可能的路径? 说明: m 和 阅读全文
摘要:
题目描述 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 示例 2: 解题思路 从后向前遍历数组,设置一个变量 ,表示最小的能到数组尾部的元素的位置(索引),初始值就是数组的最后一个元素。 遍历过程 阅读全文
摘要:
题目描述 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 可能变为 )。 搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 。 你可以假设数组中不存在重复的元素。 你的算法时间复杂度必须是 O (log n ) 级别。 示例 1: 示例 2: 解题思路 阅读全文
摘要:
题目描述 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例: 现有矩阵 matrix 如下: 给定 target = ,返回 。 给定 target = ,返回 。 解题思路 阅读全文
摘要:
题目描述 给出一个区间的集合,请合并所有重叠的区间。 示例 1: 示例 2: 解题思路 定义一个比较器,按照区间的起始值排序 使用上述比较器对区间集合进行排序 遍历区间集合,使用一个链表 保存合并后的结果 如果当前区间和结果链表的尾部 没有 交集,就直接加入结果链表 如果当前区间和结果链表的尾部 有 阅读全文
摘要:
题目描述 在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 示例 2: 说明: 你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。 解题思路 使用快速排序的思想来解题 每次选择数组中最后一个元素作为目标 阅读全文
摘要:
题目描述 给定一个按照升序排列的整数数组 ,和一个目标值 。找出给定目标值在数组中的开始位置和结束位置。 你的算法时间复杂度必须是 O (log n ) 级别。 如果数组中不存在目标值,返回 。 示例 1: 示例 2: 解题思路 题目要求时间复杂度是 O (log n ) ,优先考虑二分查找。 先通 阅读全文
摘要:
题目描述 峰值元素是指其值大于左右相邻值的元素。 给定一个输入数组 ,其中 ,找到峰值元素并返回其索引。 数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。 你可以假设 。 示例 1: 示例 2: 说明: 你的解法应该是 O ( logN ) 时间复杂度的。 解题思路 从说明来看,要 阅读全文
摘要:
题目描述 给定一个包含红色、白色和蓝色,一共 n 个元素的数组, 原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意: 不能使用代码库中的排序函数来解决这道题。 示例: 进阶: 一个直观的解决方案是 阅读全文