摘要: 从一道动态规划到卡特兰数 LeetCode 96 题目链接:https://leetcode cn.com/problems/unique binary search trees/ 题意:给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? n = 3 时: 动态规划 思路:从 阅读全文
posted @ 2019-12-03 11:03 stul 阅读(308) 评论(0) 推荐(0) 编辑
摘要: /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { 阅读全文
posted @ 2019-11-05 09:33 stul 阅读(144) 评论(0) 推荐(0) 编辑
摘要: package test; public class ListNode{ int val; ListNode next; public ListNode(int x) { val = x; } public ListNode() {} public static void main(String[] 阅读全文
posted @ 2019-11-04 16:37 stul 阅读(119) 评论(0) 推荐(0) 编辑
摘要: KMP 初学 KMP 算法分为两个步骤。 1 是计算出 next 数组, 2 是根据 next 数组来求得 index 。 阅读全文
posted @ 2019-11-04 09:32 stul 阅读(97) 评论(0) 推荐(0) 编辑
摘要: 思路很简单: 分别判断 行 列 box 是否有重复的数字,如果有重复的,返回 false 。 单独拿一行来看。 1. 设置一个 HashMap<value, count> 2. put( value, getOrDefault(value,0) + 1 )。 这里不用 get ( value ), 阅读全文
posted @ 2019-10-27 11:14 stul 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 最能想到的是暴力的方法。 动态规划在这里是最有效果的解法。 时间复杂度为 O( n )。 n = 0 的时候, f 为 true。 n = 1 的时候, 只需要判断第一个字母是否在字典里。设置一个结果为 true。 n = 2 的时候, 需要判断 0 - 1 个字母,也就是 f(1) 是否为 tru 阅读全文
posted @ 2019-09-18 18:17 stul 阅读(248) 评论(0) 推荐(0) 编辑
摘要: 思路: 1.首先找到上山点,用一个变量 j 来开始上山。 2.计算山脉的长度。 长度分为两部分,一部分是上山,一部分是下山。 这题要注意边界。 3.保存山脉的长度 j - i + 1。 为什么要 +1 ?因为我们之前写的上山点是 A[ i ] > A [ i - 1] 。 i - 1 的时候,才是上 阅读全文
posted @ 2019-09-18 15:52 stul 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 题目的意思是,判断串 s 是否为串 t 的子序列。 暴力法,时间复杂度为 O(N)。 用法:java 的 indexOf indexOf有四种用法: 1.indexOf(int ch) 在给定字符串中查找字符(ASCII),找到返回字符数组所对应的下标找不到返回-1 2.indexOf(String 阅读全文
posted @ 2019-09-18 14:36 stul 阅读(481) 评论(0) 推荐(0) 编辑
摘要: 这个题目很容易想到用 dp 来做,而且状态转移方程也很简单, 标准方程是 :dp[i][j] = dp[i-1][j] + dp[i][j-1]. 我的方程:dp[i][j] = dp[i-1][j] + dp[i][j-1] + dp[i][j]。 多加了一个。因为我预处理的时候,把所有带 0 的 阅读全文
posted @ 2019-09-18 11:38 stul 阅读(213) 评论(0) 推荐(0) 编辑
摘要: 这个题目归类于简单的 dp。 n = 1 的时候, dp[ 1 ] = 1. n = 2 的时候, dp[ 2 ] = max( dp[ 1] , nums[ 2 ]) n = 3 的时候, dp [ 3 ] = max( dp[2], nums[3] + dp[1]) 由此可以推出状态转移方程 d 阅读全文
posted @ 2019-09-18 11:34 stul 阅读(167) 评论(0) 推荐(0) 编辑