刷题刷题刷题
frances hhh
这个作者很懒,什么都没留下…
展开
-
leetcode115 - 字符串子序列匹配问题 - 动态规划
思路这是一道字符串t匹配字符串s的问题s = “babgbag”t = “bag”dp数组的定义如果t的“ba”和s的“bab”匹配上了,当t的“g”和s的“babg”的“g”匹配上以后,成功匹配的个数就是“ba”和“bab”匹配的个数(这里要注意理解,如果s[i] == t[j]则s[0 ... i]与t[0 ... j]的成功匹配个数与s[0 ... i-1]与t[0 ... j-1]的成功匹配个数相同)。所以每个dp元素的含义是t的前i个字符与s的前j个字符成功匹配的个数 pub.原创 2021-05-21 21:59:15 · 451 阅读 · 0 评论 -
贪心算法 - 区间调度、跳跃游戏
一 区间调度1. 区间调度问题给定[start, end]区间,设计算法找最多有几个互不相交二点区间。1.1 解题思路对所有区间根据end进行排序,选中最小得区间x删除与x相交得区间重复1.2.步骤。选出最大不相交子集。1.2 图示1.3 类似问题打气球问题,课程表\宣讲会教室分配,重叠子区间。1.4 解题模板比较器参考:https://editor.csdn.net/md/?articleId=116269691 public static int intervalSc原创 2021-05-20 14:06:04 · 192 阅读 · 1 评论 -
背包问题
背包问题题目描述:给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1递归解法 public static int coins1(int[] arr, int aim){ if(arr == null || arr.length ==原创 2021-05-19 17:07:09 · 103 阅读 · 0 评论 -
剑指offer-Code04-矩阵查找数
题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。原创 2021-05-11 21:50:40 · 173 阅读 · 0 评论 -
剑指offer-Code03
题目描述找出数组中重复的数字。在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。解法一、字典时间复杂度O(N)空间复杂度O(N) public int findRepeatNumber2(int[] nums) { if(nums.length == 0 || nums == null){ return -1;原创 2021-05-11 21:17:17 · 84 阅读 · 0 评论 -
二分查找模板及变形
二分搜索模板及变形一、二分搜索模板 int binarySearchTemplate(int[] nums, int target){ int left = 0, right = ...; while (...){ int mid = left + (right - left) / 2; if (nums[mid] == target) { } else if(nums[mid] < tar原创 2021-05-11 13:34:53 · 155 阅读 · 0 评论 -
动态规划-最长递增子序列
leetcode300 最长递增子序列 /* * 最长递增子序列 返回子序列 * * 相似题:leetcode300 * 输入:nums = [10,9,2,5,3,7,101,18] * 输出:4 * 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。 * */ //得到dp[]-O(N2) public static int[] getdp(int[] arr){ int[] dp = new i原创 2021-05-08 15:22:15 · 107 阅读 · 0 评论 -
leetcode53 最大子数组及最大子矩阵
leetcode53 最大子数组题目描述:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大为 6。cur = cur > 0 ? cur : 0注意若nums[i]为负数,则将当前的累加数清空,从零开始累加,否则不为最大累加和。 public int maxSubArray(int[] nums){原创 2021-05-08 15:13:17 · 230 阅读 · 0 评论 -
Manacher
Manacher算法给定一个字符串str,返回str中最长回文子串的长度eg: str = "133331"有奇回文有偶回文。str扩展 str’ = “#1#3#3#3#3#1#” O(N2)概念回文半径回文直径从左向右求解将值记录在回文半径数组中P_arr[]回文半径的最右边界RC:2的中心BFPRT无序数组找到最小的第k个数 O(n)...原创 2021-04-30 16:51:34 · 122 阅读 · 1 评论 -
暴力递归-->动态规划
题目1 打气球的最大分数题目描述给定一个数组arr,长度为n。代表排有分数的气球。 每打爆一个气球都能获得分数,假设打爆气球的分数为X,获得分数的规则如下:1)如果被打爆气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为R.获得分数为LXR2)如果被打爆的气球的左边有没被打爆的气球,找到离被打爆气球最近的气球,假设分数为L:如果被打爆气球的右边所有气球都已经被打爆,获得分数为LX。3)如果被打爆气球原创 2021-04-28 14:21:50 · 109 阅读 · 0 评论 -
2021-04-25
给定一个数组代表一个容器,比如[3,1,2,4],代表0位置是一个宽度为1,高度为3的直方图。代表1位置是一个宽度为1,高度为1的直方图。代表2位置是一个宽度为1,高度为2的直方图。代表3位置是一个宽度为1,高度为4的直方图。所有直方图的底部都在一条水平线上,且紧靠着。把这个图想象成一个容器,这个容器可以装3格的水。给定一个没有负数的数组arr,返回能装几格水.题意理解解法一 public static int getWater(int[] arr){ ..原创 2021-04-25 15:41:06 · 75 阅读 · 0 评论 -
暴力递归-> 动态规划
暴力递归-> 动态规划一、题目描述暴力递归解法分析二、相关概念无后效性问题:与到达状态得路径无关,参数固定,返回值也固定。本题 i j是可变参数,返回值固定。有后效性问题:Hanoi问题、N皇后问题2.arr aim固定i sum可变参数...原创 2021-04-16 13:09:10 · 174 阅读 · 0 评论 -
递归
1.求n! /* * 求n! * */ public static long getFactorial1(int n){ if (n == 1){ return 1L; } return (long) n * getFactorial1(n - 1); } /* * 非递归求n! * */ public static long getFactorial2(int原创 2021-04-15 21:04:47 · 101 阅读 · 0 评论 -
KMP
KMP一、最长前缀、最长后缀1. 前缀、后缀概念:前缀,除了最后一个字符以外,一个字符串的全部头部组合;后缀,除了第一个字符以外,一个字符串的全部尾部组合。eg: str1 = “abcabcd”'a’前缀,后缀为空集,共有元素为0'ab’前缀[a],后缀[b],共有元素为0'abc’前缀[a, ab],后缀[bc, c],共有元素为0‘abca’前缀[a, ab, abc],后缀[bca, ca, a],共有元素为’a’,共有元素长度为1‘abcab’前缀[a, ab, abc, ab原创 2021-04-15 13:43:36 · 162 阅读 · 0 评论 -
2021-03-11
` int binarySearchTemplate(int[] nums, int target){int left = 0, right = …;while (…){int mid = left + (right - left) / 2; if (nums[mid] == target) { } else if(nums[mid] < target){ } else if(nums[mid] > target){ }原创 2021-03-11 21:14:05 · 72 阅读 · 0 评论 -
leetcode 297
public class Codec { //二叉树的序列化 String SEP = ","; String NULL = "null"; String serialize(TreeNode root){ StringBuilder sb = new StringBuilder(); serialize(root, sb); return sb.toString(); } void serialize(Tr原创 2020-12-15 21:23:17 · 73 阅读 · 0 评论 -
leetcode 652
class Solution {/* //记录所有子树 HashSet<String> memo = new HashSet<>();*/ //记录所有子树及其出现次数 HashMap<String, Integer> memo = new HashMap<>(); //记录重复的子树根节点 LinkedList<TreeNode> res = new LinkedList<>();原创 2020-12-14 21:45:53 · 82 阅读 · 0 评论 -
leetcode 106
class Solution { public TreeNode buildTree(int[] inorder, int[] postorder){ return buildTree(inorder, 0, inorder.length - 1, postorder, 0, postorder.length - 1); } public TreeNode buildTree(int[] inorder, int inStart, i原创 2020-12-14 20:52:37 · 71 阅读 · 1 评论 -
leetcode 105
class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { return buildTree(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1); } public TreeNode buildTree(int[] preorder, int preStart,原创 2020-12-14 13:56:10 · 68 阅读 · 0 评论 -
leetcode 654
class Solution { public TreeNode constructMaximumBinaryTree(int[] nums) { return build(nums, 0, nums.length - 1); } TreeNode build(int[] nums, int low, int high){ //base case if(low > high){ return null;原创 2020-12-14 11:16:40 · 118 阅读 · 0 评论 -
leetcode 116
class Solution { Node connect(Node root){ if(root == null){ return null; } connectTwoNode(root.left, root.right); return root; } void connectTwoNode(Node node1, Node node2){ if(node1 ==原创 2020-12-14 10:33:25 · 61 阅读 · 0 评论 -
leetcode 226
class Solution { public TreeNode invertTree(TreeNode root) { if (root == null) { return null; } invertTree(root.left); invertTree(root.right); TreeNode tmp = root.left; root.left = root.righ原创 2020-12-14 10:19:18 · 60 阅读 · 0 评论 -
leetcode 114
class Solution { public void flatten(TreeNode root) { if (root == null) return; flatten(root.left); flatten(root.right); TreeNode left = root.left; TreeNode right = root.right; root.left = null;原创 2020-12-14 10:14:25 · 137 阅读 · 0 评论 -
刷题过程中链表基本问题
递归反转链表public class ReverseLinkedList { public class ListNode{ int value; ListNode next; ListNode(int data){ value = data; } } ListNode reverse(ListNode head){ //base case if(head.ne原创 2020-12-10 10:02:48 · 94 阅读 · 0 评论 -
数据结构操作模版
数组遍历 void traverse(int[] arr){ for (int i = 0; i < arr.length; i++ ){ //对arr[i]进行操作 } }链表顺序遍历 class ListNode{ int value; ListNode next; } void traverse(ListNode head){ for (List原创 2020-12-09 20:41:26 · 125 阅读 · 0 评论 -
leetcode#204 计数质数
class Solution { public int countPrimes(int n) { int count = 0; for(int i = 2; i < n; i++){ boolean flag = true; for(int j = 2; j < i; j++){ if(i % j == 0){ flag = false;原创 2020-12-03 22:04:13 · 68 阅读 · 0 评论 -
leetcode#225 用队列实现栈
leetcode 队列实现栈class MyStack { private Queue<Integer> q1; private Queue<Integer> q2; /** Initialize your data structure here. */ public MyStack() { q1 = new LinkedList<>(); q2 = new LinkedList<>();原创 2020-12-02 21:49:55 · 99 阅读 · 0 评论