
数据结构与算法
文章平均质量分 58
As_theWind
以终为始
展开
-
SpringCloud微服务架构实用篇
微服务是一种经过良好架构设计的分布式架构方案,微服务架构特征,单一职责微服务拆分粒度更小,每一个服务都应唯一对应的业务能力,做到单一职责,避免重复业务开发,面向服务:微服务对外暴露业务接口,自治:团队独立、技术独立、数据独立、部署独立,隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题原创 2022-05-05 19:53:17 · 1440 阅读 · 2 评论 -
算法学习:474.一和零
01背包一定是外层for循环遍历物品,内层for循环遍历背包容量且从后向前遍历!原创 2022-04-06 18:07:32 · 257 阅读 · 0 评论 -
算法学习:494. 目标和
既然为目标,target就有:left组合-right组合 = target。left + right 等于 sum,而sum是固定的。那么公式left - (sum - left) = target ,left = (target + sum) /2。求的就是在集合nums种找出和为left的组合。假设加法求的总和为x,那么减法对应的总和就式sum - x。最终要求的是x - (sum - x) = target, x = (target + sum) / 2。原创 2022-04-05 18:29:25 · 199 阅读 · 0 评论 -
算法学习:139. 单词拆分
单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包装满。原创 2022-04-05 07:39:22 · 862 阅读 · 0 评论 -
算法学习:279.完全平方数
如果求组合数就是外层for循环遍历物品,内层for遍历背包。如果求排列数就是外层for遍历背包,内层for循环遍历物品。所以本题外层for遍历背包,内层for遍历物品,还是外层for遍历物品,内层for遍历背包,都是可以的!原创 2022-04-04 22:55:39 · 198 阅读 · 0 评论 -
算法学习:1049. 最后一块石头的重量 II
让石头分成重量相同的两堆,相撞之后剩下的石头最小,本题物品的重量为store[i],物品的价值也为store[i],对应着01背包里的物品重量weight[i]和 物品价值value[i]。原创 2022-04-04 13:02:10 · 331 阅读 · 0 评论 -
算法学习:416. 分割等和子集
给你一个 只包含正整数 的 非空 数组 nums 。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。原创 2022-04-04 11:10:20 · 569 阅读 · 0 评论 -
算法学习:96.不同的二叉搜索树
给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。原创 2022-04-04 07:37:36 · 325 阅读 · 0 评论 -
算法学习:343.整数拆分
给定一个正整数 n,将其拆分为至少两个正整数的和,并使这些整数的乘积最大化。 返回你可以获得的最大乘积。原创 2022-04-03 19:04:56 · 948 阅读 · 0 评论 -
算法学习:63. 不同路径 II
这道题相对于62.不同路径就是有了障碍原创 2022-04-03 18:03:18 · 123 阅读 · 0 评论 -
算法学习:62.不同路径
题目中说机器人每次只能向下或者向右移动一位,其实机器人走过的路可以抽象为一颗二叉树,而二叉树的叶子节点就是终点。原创 2022-04-03 16:43:02 · 218 阅读 · 0 评论 -
算法学习:746. 使用最小花费爬楼梯
每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。原创 2022-04-03 16:00:07 · 285 阅读 · 0 评论 -
算法学习:70. 爬楼梯
1. 确定dp数组以及下标的含义2. 确定递推公式3. dp数组的初始化4. 确定遍历顺序原创 2022-04-03 15:20:31 · 727 阅读 · 0 评论 -
算法学习:509.斐波那契数
1.确定dp数组以及下标的含义dp[i]的定义:第i个数的斐波那契值为dp[i]2.确定递推公式状态转移方程 dp[i] = dp[i-1] + dp[i-2]3.dp数组的初始化题目中已经给出了 dp[0] = 0 , dp[1] = 14.确定遍历顺序从递推公式中可以看出dp[i]是依赖dp[i-1] 和dp[i-2]的,所以遍历顺序肯定是从前到后的。5.举例推导dp数组如果代码写出来发现不对,把dp数组打印下来看看哪里出错了。原创 2022-04-03 14:53:52 · 703 阅读 · 0 评论 -
算法学习:968.监控二叉树
每个节点都有三种状态,情况一,该节点无覆盖,情况二,该节点有摄像头,情况三,该节点有覆盖。可以分别用三个数字表示三种情况的状态,0表示该节点无覆盖,1表示该节点有摄像头,2表示该节点有覆盖。空节点是有覆盖的,所以递归遇见了空节点,应该返回2。原创 2022-04-03 10:24:31 · 242 阅读 · 0 评论 -
算法学习:714. 买卖股票的最佳时机含手续费
循环遍历股票数组,情况一:如果每一天购买的价格(含手续费)小于第一天购买的,这时候购买股票(含手续)的价格最低,适合购买股票;情况二:如果股票的单价大于购买的价格(含手续费)那么此时就可以计算利润(后面几天也可能有利润),然后更新买入股票的价格(更新,买入股票的价格(不含手续费,如果下次比较合适购买时会加上手续费)),情况三可以省略如果不满足以上两种情况直接进入下次循环,直到找到最终利润为止。原创 2022-04-03 08:38:26 · 321 阅读 · 0 评论 -
算法学习:738.单调递增的数字
局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]--,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数。全局最优:得到小于等于N的最大单调递增的整数。原创 2022-04-02 18:56:23 · 351 阅读 · 0 评论 -
算法学习:56. 合并区间
解决区间问题的一般思路是先排序,然后观察规律。一个区间可以表示为[start,end] ,是可以清晰可见使用按start进行排序。对于几个相交区间合并后的结果区间x,x.start一定是这些相交区间中start最小的,x.end一定是这些相交区间中end最大的。原创 2022-04-02 16:50:14 · 360 阅读 · 0 评论 -
算法学习:763.划分字母区间
统计每一个字符最后出现的位置,从头遍历字符,并更新字符的最远出现下标,如果找到字符最远出现位置下标和当前下标相等了,则找到了分割点。原创 2022-04-02 15:34:05 · 114 阅读 · 0 评论 -
算法学习:435. 无重叠区间
从区间集合中选择一个区间x,这个x是在当前所有区间中结束最早的(最小)。把所有与x区间相交的区间从集合中删除,重复以上步骤,直到集合为空为止,之前选出的那些x就是最大不相交子集,把每个区间的end数值升序排序,升序后找x很容易,所有与x相交的区间必然会与x的end相交,如果一个区间不想与x的end相交,它的start一定大于等于end的,这样就可以求出有几个区间不会重叠了,那么剩下的就是要去除的区间了。原创 2022-04-02 14:29:24 · 244 阅读 · 0 评论 -
算法学习:452. 用最少数量的箭引爆气球
只射重叠最多的气球,用的弓箭一定最少,把气球排序之后,从前到后遍历气球,被射的气球跳过就行了,只要记录一下数量就可以了。为了让气球尽可能的重叠,需要记录一下箭的数量就可以了。按照气球的起始位置排序,就要从前遍历气球数组,靠左尽可能让气球重复。如果气球重叠了,重叠气球中右边界的最小值之间的区间一定需要一个弓箭。原创 2022-04-02 13:15:32 · 248 阅读 · 0 评论 -
算法学习:406.根据身高重建队列
遇到两个维度权衡的时候,一定要先确定一个维度,再确定另一个维度。如果按照k来从小到大排序,排完之后,会发现k的排序并不符合条件,身高也不符合条件,两个维度哪一个都没有确定下来。那么按照身高h来排序,身高一定是从大到小排列的。(身高相同的k小的站前面),让高个子再前面。根据身高排序之后,优先按身高高的people的k来插入,后序插入节点也不会影响前面已经插入的节点,最终按照k的规则完成了队列。原创 2022-04-02 09:28:42 · 206 阅读 · 0 评论 -
算法学习:860.柠檬水找零
需要维护三种金额的数量,5,10和20。有三种情况: 1.账单是5,直接收下。 2.账单是10,消耗一个5,增加一个10。 3.账单是20,优先消耗一个10和一个5,如果不够,再消耗三个5。原创 2022-04-01 19:06:28 · 182 阅读 · 0 评论 -
算法学习:135. 分发糖果
先确定右边评分大于左边的情况(从前向后遍历)局部最优:只要右边评分比左边大,右边的孩子就多一个糖果,全局最优:相邻的孩子中,评分最高的右孩子获得比左孩子更多的糖果。局部最优推出全局最优。再确定左孩子大于右孩子的情况(从后向前遍历)使用两次贪心策略,一次从左到右遍历,只比较右孩子评分比左边大的情况,一次从右到左遍历,只比较左孩子评分比右边大的情况。原创 2022-04-01 18:24:15 · 137 阅读 · 0 评论 -
算法学习:134. 加油站
如果总油量减去总消耗大于等于零那么一定可以跑完一圈,说明各个加油站的加油站剩余油量相加一定大于等于零的。原创 2022-04-01 15:35:58 · 375 阅读 · 0 评论 -
算法学习:1005.K次取反后最大化的数组和
让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组的和达到最大。局部最优推出整体最优。如果将负数都转变为正数了,k依然大于0,此时的话只找数值最小的正整数。原创 2022-04-01 14:41:34 · 275 阅读 · 0 评论 -
算法学习:45.跳跃游戏II
此题与55跳跃游戏思路大致相似,还是要看最大覆盖范围。局部最优:当前可移动距离尽可能多走,如果还没有到终点,步数在加一,整体最优:一步尽可能多走,从而达到最小步数。解题时,要从覆盖范围开始出发,不管怎么跳,覆盖范围内一定是可以跳到的,以最小的步数增加覆盖范围,覆盖范围一旦覆盖了终点,得到的就是最小步数。原创 2022-04-01 10:02:39 · 137 阅读 · 0 评论 -
算法学习:55. 跳跃游戏
此题跳几步无所谓,关键在于可跳的覆盖范围,不一定非要明确每次跳几步,每次取最大的跳跃步数,这个就是可以跳跃的覆盖范围。这个范围不管怎么跳的,反正一定可以跳过来。每次取最大跳跃步数(取最大覆盖范围),整体最优:得到整体最大覆盖范围,看能否到终点。原创 2022-04-01 08:30:43 · 3764 阅读 · 0 评论 -
算法学习:122. 买卖股票的最佳时机 II
由于不限制交易次数,只要今天股价比昨天高,就交易.将整个区间划分为长度为1的n个区间,找到所有利润为正值的区间(上升区间)相加即可。原创 2022-04-01 07:43:50 · 256 阅读 · 0 评论 -
算法学习:53. 最大子序和
局部最优:当前“连续和”为负数时直接放弃,从下一个元素开始重新计算“连续和”,因为负数加上下一个元素,“连续和”只会越来越小。全局最优:选取最大的“连续和”。局部最优的情况,记录最大的"连续和",可以推出全局最优。原创 2022-03-31 19:29:36 · 260 阅读 · 0 评论 -
算法学习:376. 摆动序列
局部最优:删除单调坡度上的节点(不包括单调坡度两端的节点),那么这个坡度就可以有两个局部峰值。整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。原创 2022-03-31 19:06:06 · 180 阅读 · 0 评论 -
算法学习:455. 分发饼干
大尺寸的饼干既可以满足胃口大的孩子,也可以满足胃口小的孩子,那么应该优先满足胃口大的。这里的局部就是大饼干喂给胃口大的。充分利用饼干尺寸喂饱一个,全局最优的就是喂饱尽可能多的小孩。原创 2022-03-31 17:18:26 · 93 阅读 · 0 评论 -
算法学习:37. 解数独
解数独的递归函数的返回值需要用boolean类型,因为解数独找到一个符合的条件(假设树的叶子节点)就立刻返回,相当于找从根节点到叶子节点的一条唯一路径,所以需要boolean类型。解数独需要“遍历整个树型结构寻找可能的叶子节点就立刻返回”,递归的下一层的棋盘一定要比上一层棋盘多一个数,等数填满了棋盘自然就终止了,所以不需要终止条件。使用一个for循环遍历行,一个for循环遍历列,一行一列确定下来,递归遍历这个位置放9个数字的可能性。原创 2022-03-31 12:58:54 · 1443 阅读 · 0 评论 -
算法学习:51. N 皇后
使用回溯搜索“这颗树” ,只要搜索到了树的叶子节点,说明就找到了皇后们的合理位置了。使用List集合result记录最终结果,参数n是棋盘的大小,用row记录当前遍历到棋盘的第几层了。当递归到棋盘最底部的时候(也就是叶子节点),就可以收集结果并返回了。递归深度row控制棋盘的行,每一层for循环里的col控制棋盘的列,一行一列就确定了棋盘放置的位置。每一次都要从起始位置开始搜所以起始为0。按照约束条件进行去重。棋盘的宽度就是for循环的长度,递归的深度就是棋盘的高度,这样就是标准的回溯了。原创 2022-03-31 10:45:30 · 133 阅读 · 0 评论 -
算法学习:47.全排列 II
此题和46.全排列的区别在于给定一个可包含重复数字的序列原创 2022-03-30 15:42:41 · 204 阅读 · 0 评论 -
算法学习:46. 全排列
排列是有序的,[1,2] [2,1]是两个集合,这和之前的子集以及组合不一样的地方,元素在[1,2]中使用过了一次,但是在[2,1]中还要在使用一次,所以处理排列就使用不到startIndex了。原创 2022-03-30 14:15:36 · 156 阅读 · 0 评论 -
算法学习:491.递增子序列
此题要求自增子序列,是不能对原数组进行排序的,排序完的数组都是自增子序列了。求子序列,很明显一个元素不能重复使用,所以需要startIndex,调整下一层递归的起始位置。原创 2022-03-30 13:07:31 · 453 阅读 · 0 评论 -
算法学习:78. 子集
如果把子集问题、组合问题、分割问题都抽象为一棵树的话,那么组合问题和分割问题都是收集树的叶子节点,而子集问题就是找树的所有结点。子集也是一种组合问题,因为集合也是无序的。既然是无序的,取过的元素不会重复,那么循环开始就要从statIndex开始,而不是从0了。取子集问题不需要减枝,因为子集就是要遍历整颗树。原创 2022-03-30 08:35:05 · 104 阅读 · 0 评论 -
算法学习:93.复原IP地址
此题也是个切割问题,startIndex是一定需要的,因为不能重复分割,记录下一层递归分割的起始位置。还需要额外一个变量num,记录ip段的数量。原创 2022-03-30 07:55:17 · 313 阅读 · 0 评论 -
算法学习:131.分割回文串
- 组合问题:选取一个a之后,在bcdef中再去选取第二个,选取b之后在cdef中再选取第三个... - 切割问题:切割一个a之后,在bcdef中再去切割第二段,切割b之后再cdef中再切割第三段...原创 2022-03-29 16:20:50 · 171 阅读 · 0 评论