自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 索引下推

联合索引是使用一列或多列的索引,如(a,b)为一个联合索引,需按照最左匹配原则进行排序。例如,有联合索引(a,b),SQL语句,select * where a=1 and b=2,如果没有索引下推,那么存储引擎根据a=1找到符合条件的所有行数,将所有记录行回表查询到的所有记录传输给server层,server层再根据b=2过滤符合的行。这时需要建立(b,a)的索引,后续a和b的顺序会根据区分度自动排序为(b,a),b全局有序,而a从全局看不是有序的,当b=1时,a=1、2,可以将a看作局部有序。

2024-05-15 09:29:59 232

原创 MySQL多表联查会重复查找记录

在做尚上优选项目时,根据商品id查询商品参加的活动信息。需要根据skuid(商品id)对商品信息表、活动表、活动规则表进行多表联查。后把sql语句放在navicat中进行查询,发现就是会返回6条重复的记录,应该是sql语句出了问题。不过这里应该是内连接或表的主键出现了问题,做完项目再探究具体原因。由于对sql的多表联查掌握得不好,采取了一个治标不治本的方法。直接在SQL语句中加入distinct去重。结果确实没有重复了。

2024-03-23 16:58:36 307

原创 整合网关后OSS上传图片失效

在做尚上优选项目时,之前使用nginx实现跨域能够正常上传图片。但后来整合网关之后图片上传功能失效。可能是OSS没有针对整合网关的情况下还能实现跨域?需要将文件上传的controller方法单独加上。注解,在上传文件时仍从这个端口号访问。

2024-03-21 16:22:51 311

原创 feign远程调用中json转换异常Can not deserialize instance of List<xxx.xxx.xx.xx> out of START_ARRAY token

搜索无果后在项目评论区发现正解,原因是远程调用时Map集合中装的是两个List集合,但是如果活动下面没有规则就找到一个空List,在远程调用时会把这个空List当成一单个对象来看待,而不是数组,所以出现数据转换格式错误。因此,之前正确查询的id是因为其下面已经有了规则数据,而出错的id则是因为还没有加入规则信息。结果在某个活动id下可以正确查询两个列表,其余的id下都会报错。在做尚上优选项目时一个小功能,根据活动id查询该活动下的规则列表与活动范围列表。

2024-03-18 14:28:32 433

原创 Hadoop java.lang.ClassNotFoundException: org.apache.commons.lang3.StringUtils

将该工具类加入到pom文件中即可。

2024-03-10 20:07:39 358

原创 IDEA报错:java.sql.SQLException: The server time zone value ‘�й���׼ʱ��‘ is unrecognized or represents..

或除&以外的符号,不然会被解析为前一个设置携带的部分。例如在下面修正的代码中,如果使用。

2024-03-10 16:56:16 378

原创 Java快读快写模板

笔试压轴题会由于输入量较大的情况,输入输出所消耗的时间较多,导致超时,这时就需要快读快写。

2024-01-10 17:38:05 464

原创 二维费用的背包问题(背包有体积和重量两个限制)

分析:每个物品只能用1次,是典型的01背包问题。因此,只是在01背包的基础上增加了一个重量的循环。题目描述:有 N件物品和一个容量是 V的背包,背包能承受的最大重量是M。体积是 vi,重量是 mi,价值是 wi。求解将哪些物品装入背包,可使物品总体积不超过背包容量,总重量不超过背包可承受的最大重量,且价值总和最大。接下来有 N 行,每行三个整数 vi,mi,wi,用空格隔开,分别表示第 i 件物品的体积、重量和价值。第一行三个整数,N,V,M,用空格隔开,分别表示物品件数、背包容积和背包可承受的最大重量。

2024-01-10 16:59:10 496

原创 混合背包问题

在本一道题当中,我们可以看到若此题为多重背包问题,那么按照数据范围来看,其实可以用多重背包问题的二进制优化方法来水过,先将01背包,完全背包转化成多重背包,01背包的话,则可以将物品数量写成1,而完全背包,则数量为(总体积(V)/该物品的体积(v[i])。接下来有 N行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。

2024-01-09 11:45:33 407

原创 多重背包的二进制优化问题

因为完全背包的物品没有个数限制,只要体积够,就可以一直选,没有最后一项。

2024-01-09 11:01:24 1512

原创 动态规划10:判断子序列、不同的子序列、两个字符串的删除操作、编辑距离、编辑距离总结、回文子串、最长回文子序列、动态规划总结

不同的子序列:在字符串s中找到有几种子序列可以包含字符串t?如果s[i-1]==t[j-1],那么有两种情况dp[i][j]=dp[i-1][j-1]+dp[i-1][j]。也就是s减去当前一个还相等。关键在于当s[i-1]!=t[j-1]的时候,需要对s进行删除操作。也就是dp[i][j]=dp[i-1][j]。两个字符串的删除操作:可以找到两个字符串的最长公共子序列长度,然后分别减去求删除步骤。编辑距离:需要搞清楚相等的不操作和不等时的增删改操作。增和删其实是一个操作。五步骤。

2023-11-09 22:19:27 100

原创 动态规划9:最长递增子序列、最长连续递增序列、最长重复子数组、最长公共子序列、不相交的线、最长子序和

例题300:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

2023-11-07 17:25:24 2078 1

原创 动态规划8:买卖股票的最佳时机||、买卖股票的最佳时机|||、买卖股票的最佳时机Ⅳ,最佳买卖股票时机含冷冻期、买卖股票的最佳时机含手续费、股票问题总结

只能买卖一次:这个问题只需要遍历的时候更新最小买入价格和最大卖出价值即可。可以买卖无数次:第i天有买入和卖出两个状态。每个状态可以由前一天买卖与否的两个状态推出。只能买卖2次:第i天有5种状态(无操作、第一次持有、第一次不持有、第二次持有、第二次不持有),每种状态都由前一天买卖与否决定。只能买卖k次:第i天一共有2*k+1次状态,对于每种状态像上一题一样处理。注意持有和不持有的初始化卖出的后一天为冷冻期:这时第i天有四种状态(持有、当天保持不持有状态、当天卖出、冷冻期)

2023-11-02 20:02:25 144

原创 动态规划7:打家劫舍、打家劫舍||、打家劫舍|||、买卖股票的最佳时机、第7节总结

打家劫舍:只考虑两个相邻的不能一起偷所以dp[i]就由dp[i-1](偷了上一个不偷这个)和dp[i-2]+nums[i](偷了前两个,前一个不偷,再偷这个)这两个前面节点偷的状态决定。打家劫舍||:头尾相连巧妙解法:把数组分为两个子数组,分别包含头和尾,找这两个子数组的最大偷盗金额。打家劫舍|||:数组变成二叉树了,所以要遍历二叉树。并且父节点和孩子不能同时偷。首先判断要后序遍历,然后分两种情况,偷父节点与不偷父节点,分别加金额。股票买卖的最佳时间:所有天数里只能选择一天买入,一天卖出。

2023-10-25 11:39:42 52

原创 动态规划6:单词拆分、多重背包理论基础、背包问题总结

背包问题分类最重要的是:将问题抽象为背包问题,并记住动规五部曲确定dp数组(dp table)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组。

2023-10-24 20:33:31 31

原创 动态规划5:组合总和Ⅳ、爬楼梯(进阶版)、零钱兑换、完全平方数、第五节总结

组合总和Ⅳ给定一个由正整数组成且不存在重复数字的数组,找出和为给定目标正整数的组合的个数(顺序不同的序列被视作不同的组合)。这个题就是完全背包的排列问题,需要先遍历背包再是物品爬楼梯(进阶版)其实就是一个完全背包问题,在1-m的数中重复选择和为n的排列组合。零钱兑换给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数(每种硬币的数量是无限的)。这个题需要注意的是求最少个数。且当前个数依赖于减去当前硬币的个数加一。

2023-10-21 17:14:08 69

原创 动态规划4:目标和、一和零、完全背包理论、零钱兑换||、第4节总结

目标和难点是想到背包的容量是left,因为sum和target固定,所以left=(sum+target)/2。并且还要想到sum和target同奇同偶可以剪枝。所以,题目就转换为了在容量为left的背包中,和为left的组合数。一和零一个字符串数组中的每个字符串的1、0个数,找到满足m个0,n个1的最长子集数。dp[i][j]表示满足(小于等于)i个0和j个1的字符串个数。dp[i][j]应该由去掉当前字符串的01个数后的个数+1,与本身的最大值决定。

2023-10-17 20:47:47 69

原创 动态规划3:01背包理论基础|、01背包理论基础||、分割等和子集、最后一块石头的重量||、第三节总结

二维dp和一维dp有着很大的区别,空间复杂度降低一个数量级。遍历的方向不一样:二维可以先物品再背包,也可以先背包再物品。而一维只能先物品再背包,因为是对二维数组的压缩,是为了防止在dp[j]下只能添加一个物品。背包的起始和终止条件不同:二维0<=j<=n,从0到n的正序遍历。而一维是从j=n开始到j>=n-weight[i]的倒序遍历,是为了防止将物品重复放入。递推公式随着数组的压缩发生变化。例题1049:有一堆石头,用整数数组 stones 表示。

2023-10-12 19:13:33 39

原创 动态规划2:不同路径、不同路径||、整数拆分、不同的二叉搜索树、第2节总结

不同路径:首先要想清楚dp[i][j]的含义,并且想清楚dp[i][j]可以由左节点和上节点得到。不同路径||:中间有障碍的dp为0,第一列和第一行一旦出现障碍,其后都为0。整数拆分:想清楚dp[i]是由i/2到i-1区间内的dp和i的最大值*(i-该数)得到,最好用例子推演。不同的二叉搜索树:这道题较难,需要画图推算,并且很难想到每一个节点下的布局是上一个节点布局,且总个数是左右子树布局的乘积。

2023-10-11 17:39:47 650

原创 动态规划1:理论基础、斐波那契数、爬楼梯、使用最小花费爬楼梯、第一节总结

动态规划(Dynamic programming),简称DP。如果面对一个问题有很多重叠子问题,使用动规很有效。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的。举一个例子说明动规和贪心的区别。例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2023-10-10 20:28:41 27

原创 贪心算法:单调递增的数字、监控二叉树、贪心算法总结

贪心很简单,就是常识?跟着一起刷题的录友们就会发现,贪心思路往往很巧妙,并不简单。贪心有没有固定的套路?贪心无套路,也没有框架之类的,需要多看多练培养感觉才能想到贪心的思路。究竟什么题目是贪心呢?Carl个人认为:如果找出局部最优并可以推出全局最优,就是贪心,如果局部最优都没找出来,就不是贪心,可能是单纯的模拟。(并不是权威解读,一家之辞哈)但我们也不用过于强调什么题目是贪心,什么不是贪心,那就太学术了,毕竟学会解题就行了。如何知道局部最优推出全局最优,有数学证明么?

2023-09-25 17:14:01 59

原创 贪心算法:用最少数量的箭引爆气球、无重叠空间、划分字母区间、合并区间、贪心周总结

用最少数量的箭引爆气球:求重叠区间的最大个数判断两气球是否重叠,如果重叠需要用一支箭,并更新这个重叠区间的右边界为两气球中的较小值。否则,直接跳过。无重叠区间:去掉的最少区间数,让所有的区间不重叠和上一题类似,找到重叠的区间,一旦找到重叠区间,就更新这个重叠区间的右边界为两气球中的较小值,因为较大值可能与下一个重叠,如果不去掉又会重复计算。如果直接找不重叠区间,则一旦出现重叠区间保留右边界为较小值。划分字母区间:将字母划分为尽可能多的片段,同一个字母最多出现在一个片段中。

2023-09-22 16:05:22 57

原创 贪心算法:加油站、分发糖果、柠檬水找零、根据身高重建队列、周总结

例题134:在一条环路上有 n 个加油站,其中第 i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组 gas 和 cost ,如果你可以按顺序绕环路行驶一周,则返回出发时加油站的编号,否则返回 -1。如果存在解,则 保证 它是 唯一 的。局部最优:每次选择gas-cost>=0的加油站出发,整体最优:使得油量可以满足加油站。

2023-09-19 19:11:34 29

原创 贪心算法:买卖股票的最佳时机||、跳跃游戏、跳跃游戏||(较难)、K次取反后最大化的数组和、周总结

买卖股票的最佳时机:相邻两天的利润,局部最优:只取正利润表明这段时间区间内的利润,全局最优:达到最大的利润。不考虑多久买多久卖,只需要找到所有的正利润。跳跃游戏:判断是否可以达到终点?用cover记录最长覆盖区间,每走一步判断最长覆盖区间是否需要更新。如果覆盖区间能超过或等于数组长度-1,那么就能到达。需要注意的是,步伐i是在每一步的覆盖区间cover内变化。跳跃游戏||:找到达到终点的最小步数。该题比上一题更难。需要注意的是,该题也需要最大覆盖区间来判断步数。

2023-09-18 21:51:06 100

原创 贪心算法:分发饼干、摆动序列、最大子序和

贪心没有套路,就是常识性推导加上反举例。贪心的本质是在每个阶段选择局部最优解,推出全局最优解。分发饼干:局部最优就是小饼干优先喂给胃口小的,这样可以保证剩下来的是大饼干。时间复杂度是O(nlgn),由于快排是O(nlgn),遍历是O(n),所以合起来还是这么多。最长摆动序列:局部最优解是有尽可能多的局部峰值,删除单调坡度上的节点(不包括坡度两端),那么这个坡度就可以有两个局部最优峰值。整体最优:整个序列有最多的局部峰值,从而达到最长摆动序列。最大子序列。

2023-09-15 15:15:10 163

原创 IDEA配置了jdk后为什么运行按钮是灰色的

今天闲来无事换了一个jdk,没想到IDEA不能运行文件了,所有文件都显示:cannot run program.可是运行键照样是灰色的,但是可以编译。所以,更换了JDK后需要重启IDEA!然后灵光一现,是不是没重启IDEA。果然,重启解决99%的问题。

2023-08-09 16:25:40 262

原创 回溯4:去重另一种写法、重新安排行程、N皇后、解数独

回溯是递归的副产品,只要有递归就有回溯,所有回溯法经常和二叉树遍历、深度优先遍历混在一起,因为这两种方式都用了递归。回溯法就是暴力搜索,并不是什么高效的算法,最多再剪枝一下。组合问题:N个数里面按一定规则找出k个数的集合排列问题:N个数按一定规则全排列,有几种排列方式切割问题:一个字符串按一定规则有几种切割方式子集问题:一个N个数的集合里有多少符合条件的子集棋盘问题:N皇后,解数独等等oid backtracking(参数) {if (终止条件) {存放结果;return;

2023-08-04 19:57:52 53

原创 回溯3:子集||、递增子序列、全排列、全排列||

1.求子集问题:子集问题是收集所有节点,组合切割问题是收集叶子节点。2.递增子序列:去掉同一层重复出现的元素,需要用哈希表或数组记录同层元素的出现情况,并对每一层设置used数组。3.排列问题(无重复数组):每层都是从0开始而不是startIndex,需要used记录path里放了哪些元素。4.排列问题||(重复数组):需要对for循环中重复元素去重,以及每层从0开始跳过自身。

2023-07-29 20:58:18 59

原创 回溯算法2:组合总和、组合总和||、分割回文串、复原IP地址

1.回溯的组合总和|| 和第一周的组合问题不同。这题没有数量要求,可以无限重复,但是有总和的限制,所以间接也是个数的限制。2.组合总和||| 依旧是元素重复,但解集不能有重复的组合。难点就在于去重。去重分为树枝去重和树层去重。都知道组合问题可以抽象为树形结构,那么“使用过”在这个树形结构上是有两个维度的,一个维度是同一树枝上“使用过”,一个维度是同一树层上“使用过”。没有理解这两个层面上的“使用过” 是造成大家没有彻底理解去重的根本原因。

2023-07-28 21:14:53 46

原创 回溯算法1:回溯理论、组合问题、组合优化、电话号码的字母组合

1.什么是回溯法?回溯法是递归的副产品,只要有递归就会有回溯。回溯其实就是暴力解,列出所以的答案,选择满足需要的,最多剪枝优化。组合问题:从N个数中按照一定规则选择K个数的集合。排列问题:N个数按照一定规则全排列,有几种排列方式。切割问题:一个字符串按一定的规则有几种切割方式。子集问题:一个N个数的集合里有多少符合条件的子集。棋盘问题:N皇后,解数独等。2.回溯法求组合问题(求同个集合间的组合)用递归控制for循环嵌套的数量。

2023-07-19 19:34:52 121

转载 二叉树总结

二叉树构造最麻烦的问题就是什么遍历顺序,无论是什么二叉树,涉及到构造一定是前序遍历,先构造中间节点。求普通二叉树的属性,一般是后序。求二叉搜索树的属性,一般是中序。

2023-07-11 17:24:57 30

原创 二叉树习题5:二叉搜索树的最近公共祖先、二叉搜索树中的插入操作、删除二叉搜索树中的节点、修剪二叉搜索树、将有序数组转换为二叉搜索树、把二叉搜索树转换成累加树

例题235:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。除了可以利用普通二叉树的最近公共祖先的代码,要知道二叉搜索树是有特性的,那就是左右子树分别小于大于根节点。因此,在二叉搜索树中,如果一个节点处于P和q的取值区间内,那么该节点就有可能是公共祖先,这就是最近的祖先吗?

2023-07-11 16:03:50 37

原创 二叉树习题4:合并二叉树、二叉搜索树中的搜索、验证二叉树、二叉搜索树的最小绝对差、二叉搜索树中的众数、二叉树的最近公共祖先

1.合并二叉树:同时处理两个树的节点,可以新建一个树,但更好的是直接在原来的一棵树上操作。可以用层序、递归、迭代遍历两个二叉树,重要的就是在遍历的过程中处理节点。2.二叉搜索树:碰到二叉搜索树就牢记:中序遍历就是在有序数组上操作。3.验证二叉搜索树:暴力法:中序遍历得到一个递增数组。递归比较时,不光是左节点右节点小于或大于根节点,而是左子树右子树都要小于或大于根节点。

2023-07-06 17:01:34 59 1

原创 二叉树习题3:左叶子之和、找树左下角的值、路径总和、路径总和||、从中序与后序遍历序列构造二叉树、从前序与中序遍历序列构造二叉树、最大二叉树

二叉树第三周习题练习,包括构造二叉树、递归与回溯的联系、递归返回值的确定等

2023-07-03 15:00:20 60 1

原创 二叉树习题2:翻转二叉树、N叉树的前序遍历、N叉树的后序遍历、对称二叉树、相同的树、另一颗树的子树、二叉树的最大深度、二叉树的最小深度、N叉树最大深度、完全二叉树的节点个数、平衡二叉树、二叉树所有路径

例题226:给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。层序遍历二叉树直接交换每一个节点的左右孩子。

2023-06-15 17:09:04 41

原创 二叉树递归(c++)、非统一和统一的前中后序迭代遍历(Java)、层序遍历(Java)

递归三要素:1.确定递归函数的参数和返回值:确定哪些参数是递归过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。2.确定终止条件:写完递归算法,运行时,经常遇到栈溢出的情况,就是没写终止条件或者终止条件写得不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必定溢出。3.确定单层递归的逻辑:确定每一层递归需要处理的信息,在这里也就会重复调用自己来实现递归的过程。在递归过程中,怎么算递归结束呢?

2023-06-13 20:30:10 91

转载 二叉树理论基础

int val;与链表定义类似,有两个指针,分别指向左右孩子。二叉树是一种基础数据结构,也是众多数据结构的基石。本章节介绍了二叉树的种类、存储方式、遍历方式、定义等基础概念。二叉树中不得不提到的就是递归,要掌握递归代码的写法。

2023-06-08 17:23:10 36

原创 栈与队列:理论基础、用栈实现队列、用队列实现栈、有效的括号、删除字符串中的所有相邻重复项、逆波兰表达式求值、滑动窗口最大值(难点)、前k个高频元素(难点)

首先了解栈和队列的理论基础,提到四个问题:1.C++中stack、queue是容器码?——>它们是容器适配器2.使用的stack、queue是属于哪个版本的STL?——>SGI STL是开源的3.使用的STL中的stack、queue是如何实现的?——>底层采用deque、list、链表等向外提供接口实现功能4.stack、queue提供迭代器来遍历空间吗?——>不提供面试题:栈里面的元素在内存中是连续分布的吗?

2023-06-07 15:19:57 73

转载 动态规划:01背包(滚动数组)

以上的讲解可以开发一道面试题目(毕竟力扣上没原题)。就是本文中的题目,要求先实现一个纯二维的01背包,如果写出来了,然后再问为什么两个for循环的嵌套顺序这么写?反过来写行不行?再讲一讲初始化的逻辑。然后要求实现一个一维数组的01背包,最后再问,一维数组的01背包,两个for循环的顺序反过来写行不行?为什么?注意以上问题都是在候选人把代码写出来的情况下才问的。就是纯01背包的题目,都不用考01背包应用类的题目就可以看出候选人对算法的理解程度了。

2023-05-22 16:46:42 134

转载 动态规划:二维01背包问题

详细讲解二维背包得来的5个步骤

2023-05-22 15:38:22 1271 4

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除