总结
文章平均质量分 59
peterLC
这个作者很懒,什么都没留下…
展开
-
编辑距离题目总结
判断子序列class Solution { public boolean isSubsequence(String s, String t) { //dp定义:dp[i][j]为到i-1,j-1最长子序列的长度 //递推:相等,dp[i][j] = dp[i-1][j-1] + 1; //不相等,dp[i][j] = Math.max(dp[i-1][j],dp[i][j-1]); int[][] dp = new int[s.len原创 2022-03-30 17:32:50 · 424 阅读 · 0 评论 -
买卖股票问题总结
题目列表买卖股票的最佳时机1 可以买卖一次买卖股票的最佳时机2 可以买卖多次买卖股票的最佳时机3 最多买卖两次买卖股票的最佳时机4 最大买卖k次买卖股票的最佳时机含冷冻期 如题买卖股票的最佳时机含手续费 如题解答class Solution { public int maxProfit(int[] prices) { //dp[i][0]表示持有股票所得的最大金额 //dp[i][1]表示不持有股票所得的最大金额 int[]原创 2022-02-28 16:20:05 · 219 阅读 · 0 评论 -
单词拆分两种做法(动规+记忆化搜索)
单词拆分回溯法普通的递归会超时,因为有大量的递归重复计算,所以我们可以使用记忆化搜索,创建一个memory数组,如果开始下标之后的字符串无法拆分,把该位置设为true,递归调用到的话直接返回,这种算法时间复杂度是O(n ^ 3),因为substring的时间复杂度是O(n),其实还可以再提速,把这里优化掉,我们可以使用字符串哈希算法,原理很简单,给你一个很长的字符串可能存不下和很长的数字可以存下,后者所占的空间会少很多,但主要还是为了方便判断一个字符串是否出现过,这是最基础的部分。具体算法可以参考字符原创 2022-01-16 23:30:57 · 313 阅读 · 0 评论 -
完全背包问题基础知识及两道经典例题
定义有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里物品价值总和最大。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。它的大体步骤和01背包相同,有兴趣可以去我的博客背包问题之01背包了解这里介绍下不一样的地方,因为它的物品可以拿无数件,所以在遍历顺序这里不同先来回顾一下01背包的遍历,为什么是这个顺序,内外能不能换,遍历容量为什么要从大到小我也在前原创 2022-01-15 20:49:31 · 670 阅读 · 0 评论 -
01背包问题做题总结(二)
目标和这道题和之前的不太一样,乍一看可以拿组合总和问题一样,想尝试回溯法,发现超时,于是我们可以用动态规划,这时我们要考虑dp数组的定义是什么我们假设加法的和为x,那减法的和就是sum-x,可以推出x-(sum-x) = target,举个例子,以示例1为例,tar=3,加法和为2的话,一减,减法和就是1,所以x要减(sum-x)才是target,这里要注意,不是加,还有就是nums都要参与运算,不是取几个构造也要注意,可以推出x = (sum+target)/2;x为背包容量,所以dp的定义为填满原创 2022-01-13 15:59:02 · 281 阅读 · 0 评论 -
01背包问题做题总结(一)
这周是两道类似的题分割等和子集题目概述给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。class Solution { public boolean canPartition(int[] nums) { //dp[j]:背包容量为j,本体j指目标sum/2,dp[j]为最大可以组成j的自己总和 //weight为nums[i],value为nums[i] //递推公式为原创 2022-01-12 17:15:55 · 308 阅读 · 0 评论 -
背包问题之01背包
背包问题图解01背包定义N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。最基本的01背包问题流程dp数组定义dp[i][j] 我们从下标0到i的物品任意选,背包容量为j,物品价值的最大值。时刻记住这个定义。递推公式定义对于每个物品,我们只有两种状态,放与不放不放物品:那么dp[i][j] = dp[i-1][j],和之前没什么两样放物品,这时就要考虑放进去之后原创 2022-01-11 15:26:58 · 938 阅读 · 0 评论 -
动态规划做题总结(一)
定义动态规划(Dynamic Programming,DP)是运筹学的一个分支,是求解决策过程最优化的过程,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。与贪心区别贪心是局部最优达到全局最优,每次你只需要关心拿最大还是最小即可,没有状态推导,而动规则是要从上一个状态推导得来。解题步骤明确dp数组和下标的含义定义递推公式dp数组初始化确定遍历顺序举例推导dp写题时,自己尝试推导,看和自己想的一不一样。爬楼梯以这道题作为切入点,class Solution {原创 2022-01-08 19:56:40 · 231 阅读 · 0 评论 -
贪心总结(二)
贪心解决重叠区间问题最近写了几道这种题,感觉他们都有规律可循。用最少数量的箭引爆气球class Solution { public int findMinArrowShots(int[][] points) { if(points.length == 0) { return 0; } Arrays.sort(points,(o1,o2) -> Integer.compare(o1[0],o2[0]));原创 2022-01-03 18:22:43 · 508 阅读 · 0 评论 -
Arrays.sort()深入理解(一)
用法sort(T[] a):对指定T型数组按数字升序排序。sort(T[] a,int formIndex, int toIndex):对指定T型数组的指定范围按数字升序排序。sort(T[] a, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组进行排序。sort(T[] a, int formIndex, int toIndex, Comparator<? supre T> c): 根据指定比较器产生的顺序对指定对象数组的指定对原创 2021-12-19 12:07:26 · 366 阅读 · 0 评论 -
springcloud面试题(一)
一、什么是微服务微服务是一种用于构建应用的架构方案。微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能。每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响。一组小服务每个服务运行在独立进程中服务之间使用轻量级通信服务可独立部署是基于业务能力实现无集中式管理那么我们为什么需要微服务呢?servlet+jsp不能用吗,springboot不香吗。其实只是它们无法应付当今需求多种多样的情况了。这些单体架构紧耦合,牵一发动全身,修改原创 2021-12-14 17:51:35 · 568 阅读 · 0 评论 -
贪心总结(一)
贪心的定义贪心就是每一阶段都达到局部最优,从而在整体上达到最优。举个栗子,地上一堆钱,你可以拿5张,那每次拿最大的,这就是局部最优,最后自然总钱数也是最大的。但有些题也不能用贪心,如果你要拿有体积和价值的东西,而你的背包容量有上限,这时就不能贪心了。贪心没有公式,也没有通用的套路,要靠经验,一般举不出反例,就尝试贪心吧,没准有奇效。(反例就是如果你贪别的看看能不能利益更大,不能,就试试贪心)贪心一般步骤把大问题分解成若干小问题确定贪心策略求解每个子问题的最优解将子问题的最优解堆叠成原创 2021-12-13 12:30:58 · 1211 阅读 · 0 评论 -
回溯算法总结篇
定义首先先来了解一下回溯的定义吧回溯是递归的副产物,只要有递归就会有回溯所以回溯经常和二叉树,深度优先遍历等操作联系到一起,因为他们都用到了递归。回溯本质上是暴力搜索,效率并不高,最多剪枝一下。回溯法可以解决的问题组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等回溯模板(重点)void backtracking(原创 2021-12-07 18:35:07 · 857 阅读 · 0 评论 -
回溯去重方法总结
去重问题使用used数组来标记是否使用过该元素。子集2如果把 子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题是找树的所有节点!而子集也是一种组合问题,它的集合是无序,既然是无序,取过的元素不会重复取,写回溯算法的时候,for就要从startIndex开始,而不是从0开始。那什么时候从0开始呢?等到计算排列问题时就会从0开始。去重分为两种,树层去重和树枝去重。例题如下全排列2used[i-1]来判断是哪一种,是true,说明上一个使原创 2021-12-01 15:18:34 · 506 阅读 · 0 评论 -
代码随想录 回溯法做题总结(一)
了解回溯回溯是递归的副产品,只要有递归就会有回溯。但回溯法并不是什么高效的算法。因为回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作,但也改不了回溯法就是穷举的本质。回溯可以解决的问题组合问题:N个数里面按一定规则找出k个数的集合切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集排列问题:N个数按一定规则全排列,有几种排列方式棋盘问题:N皇后,解数独等等组合是不强调元素顺序的,排列是强调元原创 2021-11-22 22:14:15 · 180 阅读 · 0 评论 -
二叉树做题阶段总结
递归三部曲确定传递参数和返回值:需要注意的是,遍历整颗二叉树,不需要返回值,而遍历某一条边则需要返回值,因为遇到符合条件的路径就要及时返回。当然有些遍历整颗二叉树的题,如果递归结束条件,如果需要接住返回值也可以加上返回值,不过不加也能做就是了确定终止条件确定单层递归的逻辑二叉树的基本知识需要了解种类、存储方式、遍历方式、定义可以参考二叉树总结(一)二叉树做题总结涉及到二叉树的构造,无论普通二叉树还是二叉搜索树一定前序,都是先构造中节点。求普通二叉树的属性,一般是后序,一般要通过递归函原创 2021-11-18 20:51:08 · 218 阅读 · 0 评论 -
二叉树总结(一)
二叉树种类满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。深度为k,有2^k-1个节点的二叉树完全二叉树完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第 h 层,则该层包含 1~ 2^h -1 个节点。二叉搜索树若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值原创 2021-11-07 13:33:49 · 176 阅读 · 0 评论 -
哈希表相关问题解法
一般来说哈希表都是用来快速判断一个元素是否出现集合里。对于哈希表,要知道哈希函数和哈希碰撞在哈希表中的作用.哈希函数是把传入的key映射到符号表的索引上。哈希碰撞处理有多个key映射到相同索引上时的情景,处理碰撞的普遍方式是拉链法和线性探测法。接下来是常见的三种哈希结构:数组set(集合)set.add() 一些需要去重的问题可能会用map(映射)常用方法 map.getOrDefault(xx,0),map.put(xx,map.getOrD原创 2021-10-24 15:53:29 · 211 阅读 · 0 评论 -
@Autowired注解理解
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在使用@Autowired之前,我们对一个bean配置起属性时,是这样用的<property name="属性名" value=" 属性值"/> 通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释下面用案例来具体说明UserRepository.java package c转载 2021-10-23 16:38:46 · 1649 阅读 · 0 评论 -
RestFul风格学习
定义RestFul风格定义restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 ——百度百科在REST中,每一个对象都是通过URL来表示的,对象用户负责将状态信息打包进每一条消息内,以便对象的处理总是无状态的。它是一种互联网应用程序的API设计理念:URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。REST 的基本原理包原创 2021-06-01 23:28:19 · 168 阅读 · 0 评论 -
JavaSE总结(思维导图)
原创 2020-10-08 19:09:59 · 172 阅读 · 0 评论 -
IO流基础知识(一)
IO流总结(一)java.io.OutputStream.字节输出流此抽象类是表示输出字节流的所有类的超类。定义了一些子类共性的成员方法:public void close() 关闭此输出流并释放与此流相关联的任何系统资源。public void flush() 刷新此输出流并强制任何缓冲的输出字节被写出public void write(byte[] b):将 b.length字节从指定的学节数组写入此输出流。publtc vold wrlte(byte[] b int原创 2020-09-27 13:45:04 · 112 阅读 · 0 评论