自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 leetcode131

时间复杂度:回溯的过程相当于遍历一棵n叉树,本题判断子串是否为回文只有是和不是两种情况,因此是一个二叉树,最坏情况下有n个回文子串,层数是串的长度n,因此是O(2^n)。每一种方案需要遍历子串求出结果,也就是O(n),因此总的时间复杂度就是O(n*2^n)。要将字符串分割成回文子串,首先想到的是回溯,遍历字符串,然后判断该子串是否是回文子串,如果是的话,那么进入下一层继续分割。如果是回文子串,那么返回1。给定一个字符串,要求将字符串分割成为回文子串,问有多少种分割方案?空间复杂度:O(n^2)

2022-10-23 22:26:22 166 1

原创 leetcode912

思想:设置两个指针,一个low和一个high,每次取出当前数组的第一个节点作为privot,然后与指针high进行比较,直到不满足,那么将该值交换到low所在的位置;先建堆,本题建立的是大顶堆,也就是升序排序。从数组的中点开始调整堆,使得每个父节点都比它的左右子节点要大。建完堆之后,每次取出根节点(也就是最大的节点),取出的元素放置在数组的最后,然后重新从根节点开始调整堆。思想:需要声明临时的数组,每次都对数组进行对半分割,然后比较前半部分和后半部分,将较小值存入临时数组。

2022-10-10 20:44:45 228

原创 重建二叉树

在中序数组中寻找根节点的时候需要O(n)遍历才能得到,可以先用一个哈希表存储起来,之后只要O(1)即可找到根节点在中序数组中的位置。思路:先根据二叉树的的前序遍历确定根节点,然后再根据中序遍历确定根节点的左右子树进行建树。

2022-10-03 11:38:20 162

原创 leetcode788

做完看了一下别人的题解发现可以用数位dp做。思路就是将数字转化为字符串,然后声明一个dp数组来记忆化搜索过的状态。思路:只有题目中出现2 5 6 9才可能是好数,如果出现了3 4 7,那么直接返回false。数据范围是[1, 10000],所以暴力枚举可以过。设置一个dif数组对10个数字进行分类。

2022-09-25 17:41:34 143

原创 leetcode6183

刚开始一直在用哈希,结果超时了,然后再开了一个哈希表优化了一下,没想到还是超时。左思右想想不到其它方法,看了题解才知道可以用字典树。前缀+字符串,这不是妥妥的字典树吗,看来是字典树的知识都快忘完了。思路:根据所有的词根构建一棵前缀树,然后拿到句子的每个单词去遍历,如果遍历到的节点是词根的节点,那么用这个词根替换原句子中的单词。思路:构建一棵前缀树,开一个26大小的结构体数组来存储,每经过一个节点就在该节点的位置加1,表示以该节点结尾的前缀单词的数量。题意:将一个句子中的所有单词替换为该单词的词根。

2022-09-18 16:54:50 91

原创 leetcode394

3. 如果遇到的是 '[',那么截断字符串,把当前字符串和数字分别入栈。4. 如果遇到的是 ']',那么弹出数字栈中的数字然后加到栈顶的字符串。2. 当遇到的是字符,那么加到当前字符串上。1. 当遇到数字,那么累加。

2022-09-11 23:45:02 180

原创 leetcode6168

搜索的时候可以记录下当前的状态,当前状态位于cur,还可以走step步,那么可以给当前状态这是一个唯一的key记录下来。题目的数据范围都是在1000以内,所以乘以一个大于1000的数即可确定当前状态的唯一key。题意:给定一个起点s和一个终点e,还有一个整数k,算出恰好走k步可以从s到达e的方法数。以步数为外层循环,依次计算每一种步数的情况下到达每一个位置的方法数。刚开始就是纯暴力,但是一直超时,并没有想到可以用记忆化。想过用动态规划,状态转移也知道,但是不能确定遍历顺序。

2022-09-04 15:26:19 250

原创 leeetcode239

1. 最开始想到的是采用单调队列,队列维护从大到小的值的下标,这样就可以判断队首的下标是否在滑动窗口的范围之外,如果在范围之外,那么弹出队列的下标。如果当前位置大于等于k-1时,开始加入最大值。思路2:后来看答案的时候发现还可以用优先队列,队列存储的是,每次判断堆顶的下标是否在窗口之内。题意:给定一个数组和一个窗口大小k,从左往右滑动窗口,依次求出窗口中的最大值。...

2022-08-27 16:37:43 150

原创 leetcode2376

用一个状态位status来表示0-9之间的数字是否被选中,例如 1100000001,表示0、8、9这三个数字已经被选中,所以要有一个参数pos来记录当前的位置。这两个参数就帮助我们记忆化了之前搜索过的。现在我们还需要第3个参数limit,这个参数表示当前位可选的数字是否收到上一位的限制,例如,对于数字1234,如果第3位选择的数字是3,那么第4位可选的数字就是0-4,否则就是0-9。数位dp的时间复杂度等于 状态个数*转移个数,对于本题就是 O(2^n * n),n是数组num的长度。

2022-08-21 16:36:25 1077

原创 grpc初体验

到github下载protoc用于编译proto文件 ==>下载链接然后在将下载完毕后的bin目录配置到环境变量中这里有个坑:安装的时候需要将go env中的GOOS设置为windows(使用go env -w GOOS=windows),否则GOPATH/bin下不会有如下的两个.exe文件。............

2022-08-13 21:46:36 1085

原创 leetcode6138

2. 遍历给定的字符串,然后将当前字符与每个字母结尾的序列依次比较,在所有绝对值小于等于k的字符中取最大值。1. 定义dp数组dp[i],表示以字符i为结尾的满足题意的最长子序列。

2022-08-07 17:01:34 75

原创 github Actions

yuminstall-ywget&&wget-Oinstall.shhttp//download.bt.cn/install/install_6.0.sh&&bashinstall.sh(版本为centos7)2)本次代码打包为一个dist文件,将dist文件夹下的所有文件上传到宝塔上的dist文件夹。域名添加自己的服务器ip,目录选择刚刚上一步创建的文件夹,然后提交。2)在远程github上新建一个仓库,将该仓库与本地的项目建立连接。1)先删除宝塔上的dist目录下的所有文件。......

2022-07-31 23:10:52 209

原创 leetcode

给定一个数组nums,数组的每一个位置放置一个气球,戳爆第i个气球可以获得nums[i-1]*nums[i]*nums[i+1]的值,问如何才能使最终获得的值最大。注意题目的边界处理问题,当气球的位置为0或者n-1的时候当做1处理,可以多开一个n+2的数组来重新存储这些数字,然后令i=0和i=n+1的位置为1,其它位置复制原数组。当我们在计算区间[i,j]的时候,依赖于区间[i,k]和区间[k,j],所以需要从后往前遍历。这题是hard难度的,想了半天确实想不出来,那就看官方题解好好学习一下吧。...

2022-07-24 21:09:25 84

原创 leetcode6121

题目给的数字是字符串,而且长度可以达到100。可以采用基数排序,开辟一个二维数组,从低位开始存储,arr[i][j]表示在nums[i]从右数第i位的所有数字中的第j小的下标。每一轮存储的数字放在一个桶中。然后在依次将桶中的结果连接起来,最后再通过根据queries数组得出结果。例如对于数字123,654,491....

2022-07-17 17:40:05 489

原创 leetcode188

题目:给定一个整数数组prices表示每一天的股票票价,最多可以进行k次交易,最大利润是多少。(你只能在卖出这支股票之后才能进行买入操作)1. 可以定义两个状态数组buy和sell。buy[i][j]表示在第i支股票时,进行了j次交易的最大利润,并且此时手上还有一支股票。sell[i][j]表示正在第i支股票时,进行了j次交易的最大利润。2. 状态转移方程:buy[i][j] = max{buy[i-1][j], sell[i-1][j] - prices[i]}可以是在第i天之前买入的,也可以是第i天买入

2022-07-10 17:00:38 195

原创 leetcode1703

得到连续k个1的最少交换次数题目:给定一个只有0和1的数组和一个数字k,返回得到k个连续的1的最少交换次数。这道题是python期末考试的附加题,并且是leetcode原题hard难度,考场上愣是没想出来,考完看别人的题解学习一下。思路:题目需要求解最小交换次数,因此只需要考虑0和1之间的交换,如果交换00和01只会增加交换次数。我们可以将每个1的下标存起来,假设这些下标分别是a1,a2,a3....ak。然后需要把这些下标移动到一个连续的长度为k的区间:x,x+1,x+2...x+k-1。那么现在的问题就

2022-07-02 19:53:18 364

原创 leetcode494

目标和题目:给你一个整数数组和一个目标值,对数组中的所有数字可以使用+或-使其和为目标值,问有多少种方式。这道题之前用了回溯的方式来做,结果运行了1秒多,效率十分低下。这次借鉴了别人01背包的做法,感觉十分巧妙。解法:对于数组中的数字,可以将其分为两部分,一部分为使用+的数字,和为sumA,另一部分为使用了-的数字,和为sumB,根据题意可以得到如下的式子:(1)sumA + sumB = sum(2)sumA - sumB = target将上述两个式子相加得到:2sumA = sum + target,

2022-06-26 15:22:44 78

原创 leetcode309

最佳买卖股票时机含冷冻期题目:每天可以选择可以买入卖出或者继续持有一笔股票,只有卖出之后才能重新买入一笔股票,并且卖出股票之后的第一天处于冷冻期,不能买入股票。问如何才能拿到最大收益?思路:每一天的收益状态都是依赖于前一天收益状态的。因此可以对每一天分为三种情况:情况1:持有该笔股票的最大收益,这一笔股票可以是今天买入的,也可以是本来就有的。情况2:不持有该笔股票并且处于冷冻期的最大收益,也就是昨天卖出了这笔股票。情况3:不持有该笔股票并且不处于冷冻期的最大收益,昨天可能是冷冻期也可能不是。可以定义一个二维

2022-06-19 18:58:22 197

原创 leetcode221 & leetcode56

最大正方形题目大意:给定一个只有0和1的矩阵,找出矩阵中能组成全是1的最大正方形。思路:要求矩阵的最大面积,可以转化为求解矩阵的最大边长。定义一个二维的dp数组,dp[i][j]表示以(i,j)为右下角的正方形的最大边长。对于dp数组应该如何求解呢?遍历到当前位置(i,j)的时候,需要考虑(i-1,j),(i,j-1),(i-1,j-1)三个位置,因为要得到的是一个正方形,故需要取这三个位置中的最小值。得到如何状态转移方程:答案也就顺其自然出来了:合并区间这是上周的mini项目考试原题,考完之后

2022-06-12 19:20:30 67

原创 leetcode91

解码方法:https://leetcode.cn/problems/decode-ways/submissions/思路:题目中要求求出数字到字母的映射,需要注意前导零的处理,像这种全局最优依赖于局部最优的问题就需要使用动态规划来求解了。首先对字符串进行遍历,每次都需要考虑前一位的数字,用a代表当前位置的数字,用b代表前一位与当前位置组成的数字,如果b能组成满足题目的数字的话(也就是b>=10&&b...

2022-06-04 20:09:35 268

原创 leetcode42

接雨水解法一:动态规划思路:只有左右两边都大于本身的位置才能存储雨水,因此可以从左往右遍历寻找每个位置左边的最大值,再从右往左遍历寻找每个位置右边的最大值,接着累加每个位置的左右最大高度值的较小值减去该位置的高度即可。func trap(height []int) int { n := len(height) left := make([]int, n) right := make([]int, n) left[0] = height[0] righ

2022-05-28 20:29:49 143

原创 leetcode77

组合给定两个数n、k,在1~n之内可以组成多少个大小为k且互不不同的数组。读完题目发现这是一道回溯题。做回溯题的时候心中要自然的建立一棵树(虽然代码中并不需要通过建树解决问题)。假如n为3,k为2,让我们来看看这棵树长什么样:但是回溯其实是暴力的做法,如果可以的话要尽可能的剪枝,减少不必要的路径。例如:如果当前的数组加上后面剩余可以选择区间小于k,那么可以直接返回了,因为后面根本不存在大小为k的数组。像这样:上代码:var ans [][]intf.

2022-05-19 18:53:04 160

原创 leetcode135 分发糖果

题目大意:给定一个数组,代表每个小孩的评分,相邻的小孩如果评分高的得到更多的糖果,每个小孩初始时有一个糖果。这是一道贪心题。刚开始以为遍历一遍就如果比前一个高的话就加1,否则减1。显然当数组减小的时候是无法保证其数量是正确的。什么意思呢?看下面我画的丑图:按照我的想法如果遍历到第五个数字那么应该有4-1=3个糖果,但实际只能有一个。正确做法:左遍历+右遍历左遍历:如果后一个比前一个大的话那么等于前一个+1,否则等于1.右遍历:思路一样,不过需要取每个位置的最大值,再来看一..

2022-05-14 16:06:48 122

原创 Java多线程

多线程的三种创建方式:package com.youyou.thread;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class ThreadDdemo03 { public static void main(String[] args) { new .

2022-04-30 12:36:25 637

原创 leetcode51

N皇后N皇后问题要求同一行、同一列还有斜对角线不能同时出现两个及以上的皇后。思路:满足题目的三个需求,需要对棋盘的深度进行递归,递归的过程中进行回溯,也就是撤销上一次的移动。class Solution {private: vector<vector<string>> ans; void slove(int n,int r, vector<string> &temp){ if(r == n){

2022-04-24 10:23:14 148

原创 LeetCode72

题目:力扣题目要求单词word1变为单词word2的最少次数。对单词的操作可以是1. 插入一个字母,2. 删除一个字母,3.替换一个字母思路就是利用动态规划,定义一个二维的dp数组,表示单词word1的前i个字母变为单词word2的前j个字母所需的最少次数。如果单词word1的第i个字母和单词word2的第i个字母相同的话,那么不用操作;如果不相等,那么可以从dp[i-1][j],dp[i][j-1],dp[i-1][j-1]三者中取最小值再加上1即可。这里还需要注意处理一下边界:d

2022-04-17 12:38:48 277

空空如也

空空如也

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

TA关注的人

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