摘要:
题目描述: 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 示例 1: 输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 阅读全文
摘要:
最大子序和(最大子段和)是非常经典的动态规划题目,其变形题目也很多。 LeetCode53最大子序和 题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 阅读全文
摘要:
动态规划(DP)要多做题,字符串上的dp和树形dp都比较难,但是不常考,最常考的还是数组上的dp题目。 写DP题目时最关键的还是要想到用dp这种方法。动态规划题目一般暴力枚举都可以解决,但是暴力时间复杂度一般都比较大,那么就要想到贪心和动态规划。 LeetCode198 打家劫舍 题目描述: 你是一 阅读全文
摘要:
题目描述: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 注意:给定 n 是一个正整数。 方法一: 很容易想到上面这种方法,其时间复杂度为O(2^n),提交OJ会超时。 方法2: 如何用递推求出第i阶爬法数量? 执行用时在所有 阅读全文
摘要:
动态规划(DP)概述: 动态规划是运筹学的一个分支。(运筹学,是现代管理学的一门重要专业基础课。该学科利用统计学、数学模型和算法等方法,去寻找复杂问题中的最佳或近似最佳的解答。) 以局部最优解最终求得全局最优解。在设计动态规划算法时,需要确认原问题与子问题、动态规划状态、边界状态结值、状态转移方程等 阅读全文
摘要:
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。 如果是返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。 例如,输入{5,7,6,9,11,10,8},返回true。 输入{7,4,6,5},返回false。 在做这道题之前我们先来熟悉一下二叉搜索树 阅读全文
摘要:
图1所示为二叉树的层次遍历,即按照箭头所指方向,按照1、2、3的层次顺序,对二叉树每个节点进行访问 (此图反映的是自左至右的层次遍历,自右至左的方式类似)。 要进行层次遍历,需要建立一个队列。先将二叉树头节点入队列,然后出队列,访问该节点, 如果它有左子树,则将左子树的根结点入队;如果它有右子树,则 阅读全文
摘要:
题目描述: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入:11110110101100000000 输出: 1 示例 2: 输入:11000110 阅读全文
摘要:
用递归方式实现二叉树先序、中序和后序遍历很简单。 用递归方法解决的问题都能用非递归的方法实现。递归就是利用函数栈来保存信息,如果用自己申请的数据结构来代替函数栈,也可以实现相同的功能。 用非递归的方式实现二叉树的先序遍历(LeetCode144): 1、申请一个栈stack,然后将头节点压入stac 阅读全文