自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mysql 插入中文错误:Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘ for column ‘name‘ at row 1

【代码】Mysql 插入中文错误:Incorrect string value: ‘\xE7\xA8\x8B\xE5\xBA\x8F...‘ for column ‘name‘ at row 1。

2023-11-05 16:49:57 486

原创 Leetcode刷题之1005.K次取反后最大化的数组和&134. 加油站&135. 分发糖果

如果ratings[i] > ratings[i - 1] 那么[i]的糖 一定要比[i - 1]的糖多一个,所以贪心:candyVec[i] = candyVec[i - 1] + 1。情况二:rest[i] = gas[i]-cost[i]为一天剩下的油,i从0开始计算累加到最后一站,如果累加没有出现负数,说明从0出发,油就没有断过,那么0就是起点。情况三:如果累加的最小值是负数,汽车就要从非0节点出发,从后向前,看哪个节点能把这个负数填平,能把这个负数填平的节点就是出发节点。

2023-09-28 08:54:45 93

原创 Leetcode刷题之435. 无重叠区间

此时问题就是要求非交叉区间的最大个数。这里记录非交叉区间的个数还是有技巧的,如图:区间,1,2,3,4,5,6都按照右边界排好序。当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?就是取 区间1 和 区间2 右边界的最小值,因为这个最小值之前的部分一定是 区间1 和区间2 的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。接下来就是找大于区间1结束位置的区间,是从区间4开始。

2023-09-27 19:37:05 195

原创 leetcode刷题122.买卖股票的最佳时机 II

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:示例 2:示例 3:提示:这道题目可能我们只会想,选一个低的买入,再选个高的卖,再选一个低的买入.....循环反复。如果想到其实最终利润是可以分解的,那么本题就很容易了!如何分解呢?假如第 0 天买入,第 3 天卖出,那么利润为:prices[3] - prices[0]。相

2023-09-26 21:41:53 100

原创 Leetcode刷题之贪心算法455.分发饼干

对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;如果 s[j] >= g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子,那么就应该优先满足胃口大的。然后从后向前遍历小孩数组,用大饼干优先满足胃口大的,并统计满足小孩数量。为了满足更多的小孩,就不要造成饼干尺寸的浪费。

2023-09-26 21:24:39 35

原创 Leetcode刷题之回溯总结

在每一步中,它尝试一种可能的解决方案,并继续向下探索。如果发现无法找到有效的解决方案,它会返回上一步,撤销之前的决策,并尝试其他可能性。回溯算法是一种强大的问题求解方法,它在计算机科学和编程中有着广泛的应用。无论你是初学者还是有一定编程经验的开发者,深入了解回溯算法都是值得的。本篇博客将引导你进入回溯算法的世界,从基本概念到实际应用,帮助你掌握这一强大的工具。回溯算法不仅在算法竞赛中有用,还在现实生活和工程项目中有广泛应用。回溯算法是一种通过不断尝试可能的解决方案来解决问题的算法。

2023-09-22 20:54:27 25

原创 Leetcode刷题之491.递增子序列&46.全排列&131.分割回文串

因为排列问题,每次都要从头开始搜索,例如元素1在[1,2]中已经使用过了,但是在[2,1]中还要再使用一次1。可以使用双指针法,一个指针从前向后,一个指针从后向前,如果前后指针所指向的元素是相等的,就是回文字符串了。示例: 输入: "aab" 输出: [ ["aa","b"], ["a","a","b"] ]给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。

2023-09-21 19:31:45 28

原创 Leetcode刷题之93.复原IP地址&78.子集&90.子集II

例如:"0.1.2.201" 和 "192.168.1.1" 是 有效的 IP 地址,但是 "0.011.255.245"、"192.168.1.312" 和 "192.168@1.1" 是 无效的 IP 地址。示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。

2023-09-19 20:54:28 58

原创 leetcode刷题之39. 组合总和&40.组合总和II&131.分割回文串

给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的数字可以无限制重复被选取。说明:示例 1:示例 2:这里依然是定义两个全局变量,二维数组result存放结果集,数组path存放符合条件的结果。(这两个变量可以作为函数参数传入)首先是题目中给出的参数,集合candidates, 和目标值target。此外我还定义了int型的sum变量来统计单一结果path里的总和,其实这个sum也可

2023-09-18 21:37:33 32

原创 Leetcode刷题之216.组合总和III

参照上一题组合的实现,处理的方式基本上是一样的,注意输的深度是要找的数的个数,树的宽度是数组的长度,这题唯一是要判断和是否一致和结果集的不同。找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。示例 2: 输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]示例 1: 输入: k = 3, n = 7 输出: [[1,2,4]]说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

2023-09-16 21:27:05 27

原创 Leetcode之回溯算法&第77题. 组合

回溯 <---->递归1.递归的下面就是回溯的过程2.回溯法是一个 纯暴力的 搜索3.回溯法解决的问题:3.1组合 如:1234 两两组合3.2切割问题 如:一个字符串有多少个切割方式 ,或者切割出来是回文3.3子集 : 1 2 3 4 的子集3.4排列问题(顺序)3.5棋盘问题:n皇后 解数独4.回溯可抽象成树形结构if(终止条件) {收集结果returnfor(集合的元素集,类似子节点的个数)处理结点。

2023-09-15 10:24:56 22

原创 Leetcode刷题之669. 修剪二叉搜索树&108.将有序数组转换为二叉搜索树&538.把二叉搜索树转换为累加树

你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。节点的左子树仅包含键 小于 节点键的节点。节点的右子树仅包含键 大于 节点键的节点。因为数组大家都知道怎么遍历啊,从后向前,挨个累加就完事了,这换成了二叉搜索树,看起来就别扭了一些是不是。然后再发现这是一棵二叉搜索树,二叉搜索树啊,这是有序的啊。

2023-09-15 09:45:10 35 1

原创 Leetcode刷题之236. 二叉树的最近公共祖先&701.二叉搜索树中的插入操作&450.删除二叉搜索树中的节点

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。首先找到需要删除的节点;例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]

2023-09-14 22:27:17 34 1

原创 Leetcode刷题之530.二叉搜索树的最小绝对差&501.二叉搜索树中的众数&236. 二叉树的最近公共祖先

示例 2: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4 输出: 5 解释: 节点 5 和节点 4 的最近公共祖先是节点 5。示例 1: 输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]提示:树中至少有 2 个节点。

2023-09-12 21:17:25 67 1

原创 Leetcode刷題之654.最大二叉树&700.二叉搜索树中的搜索&617.合并二叉树&98.验证二叉搜索树

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。如果root->val > val,搜索左子树,如果root->val < val,就搜索右子树,最后如果都没有搜索到,就返回NULL。1、先要找到数组中最大的值和对应的下标, 最大的值构造根节点,下标用来下一步分割数组。给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。递归的时候:因为二叉搜索树的节点是有序的,所以可以有方向的去搜索。

2023-09-11 20:22:00 51

原创 Leetcode刷题之513.找树左下角的值&112. 路径总和&106.从中序与后序遍历序列构造二叉树

找到。

2023-09-10 19:44:22 30 1

原创 Leetcode之110.平衡二叉树

给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false。

2023-09-09 15:06:45 42 1

原创 leetcode刷题之104.二叉树的最大深度

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3。

2023-09-08 14:28:59 21 1

原创 Leetcode刷题之翻转二叉树

翻转二叉树,交换左右孩子节点,使用中序遍历或者后序遍历都可以只会递归法1、确定递归函数的参数和返回值参数就是要传入节点的指针,不需要其他参数了,通常此时定下来主要参数,如果在写递归的逻辑中发现还需要其他参数的时候,随时补充。返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为TreeNode*。2、确定终止条件当前节点为空的时候,就返回3、确定单层递归的逻辑。

2023-09-07 21:51:15 180 1

原创 Leetcode之二叉树的递归遍历

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

2023-09-05 20:30:38 27 1

原创 Leetcode刷题之239. 滑动窗口最大值

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?

2023-09-05 20:22:54 25 1

原创 Leetcode刷题之20. 有效的括号 &1047. 删除字符串中的所有相邻重复项

输入: ["10", "6", "9", "3", "+", "-11", " * ", "/", " * ", "17", "+", "5", "+"]第三种情况:遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。给定逆波兰表达式总是有效的。来说其实也是匹配问题,20. 有效的括号 是匹配左右括号,本题是匹配相邻元素,最后都是做消除的操作。给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。

2023-09-02 16:27:42 25 1

原创 Leetoce刷题之232.用栈实现队列

把que1最后面的元素以外的元素都备份到que2,然后弹出最后面的元素,再把其他元素从que2导回que1。,再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。push(x) -- 将一个元素放入队列的尾部。在push数据的时候,只要数据放进输入栈就好,peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。pop() -- 从队列首部移除元素。最后如何判断队列为空呢?

2023-09-02 15:07:53 20 1

原创 Leetcode刷题之实现 strStr()

说到KMP,先说一下KMP这个名字是怎么来的,为什么叫做KMP呢。因为是由这三位学者发明的:Knuth,Morris和Pratt,所以取了三位学者名字的首字母。所以叫做KMP写过KMP的同学,一定都写过next数组,那么这个next数组究竟是个啥呢?next数组就是一个前缀表(prefix table)。前缀表有什么作用呢?前缀表是用来回退的,它记录了模式串与主串(文本串)不匹配的时候,模式串应该从哪里开始重新匹配。

2023-09-01 21:47:23 24 1

原创 Leetcode刷题之344.反转字符串&541. 反转字符串II& 剑指Offer 05.替换空格&151.翻转字符串里的单词&剑指Offer58-II.左旋转字符串

如果不为0,说明不是第一个单词,需要在单词中间加一个空格,然后我们要找到下一个单词的结束位置我们用一个while循环来找下一个为空格的位置,在此过程中继续覆盖原字符串,找到结束位置了,下面就来翻转这个单词,然后更新i为结尾位置,最后遍历结束,我们剪裁原字符串到storeIndex位置,就可以得到我们需要的结果。具体的反转使用reverse来实现。输入:["H","a","n","n","a","h"]输出:["h","a","n","n","a","H"]输入:["h","e","l","l","o"]

2023-08-31 22:25:50 25

原创 Leetcode之第454题.四数相加II &383. 赎金信 & 第15题. 三数之和 & 第18题. 四数之和

满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2] ]拿这个nums数组来举例,首先将数组排序,然后有一层for循环,i从下标0的地方开始,同时定一个下标left 定义在i+1的位置上,定义下标right 在数组结尾的位置上。给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。一些同学可能想,用数组干啥,都用map完事了,

2023-08-30 21:12:28 20 1

原创 leetcode之242.有效的字母异位词&349.两个数组的交集&第202题. 快乐数 &1. 两数之和

基础回顾哈希表定义:哈希表是根据关键码的值而直接进行访问的数据结构。哈希表作用:。查找策略: 哈希法,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。

2023-08-29 16:28:54 20 1

原创 Leetcode——24. 两两交换链表中的节点

这里借用代码随想录的图片,这一题的关键是循环的终止条件和需要用临时的指针保存哪一个指针的问题。因此,我们可以得出一个结论,当在用一个指针ptr,从0开始,走M步到入口时, slow和ptr同时出发,同样走M步((r-1)c + (c- P)) 也就是走(r-1)圈,然后在加上 c-p步,也就是从相遇到p点回到起点。具体情况, 分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。

2023-08-27 23:27:42 44

原创 Leetcode——203.移除链表元素&707.设计链表&206.反转链表

为什么要保存一下这个节点呢,因为接下来要改变 cur->next 的指向了,将cur->next 指向pre ,此时已经反转了第一个节点了。最后,cur 指针已经指向了null,循环结束,链表也反转完毕了。示例 1: 输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5]示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL。示例 3: 输入:head = [7,7,7,7], val = 7 输出:[]

2023-08-26 09:29:41 29

原创 算法Day2——977.有序数组的平方& 209. 长度最小的子数组

原来是还有负数,负数平方完了就不是一个递增序列了,所以要处理负数的问题,简单的想法就是暴力的平方,然后排序。自己写的代码,发现不太对劲,编译一下[-4,-1,1,256,100],问题1、没有用另一个数组保存,直接使用了原数组,导致数据混乱。1.暴力解法,两个for循环,过程略,一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。主要是循环的过程中对于边界的控制,需要记录的是圈数,X轴和y轴某个具体的数值,中间数值的控制。

2023-08-25 19:09:43 112 1

原创 算法Day1——704.二分查找法&27. 移除元素

这个时候就要用到游标,定义一个tag,比如middle代表中间元素的下标,初始定义left为数组的0位置,定义right为数组的长度减一(下标从0开始),那么准备工作就准备好了!学过C语言都知道,在一个定义好的数组中寻找一个数,直接使用一个for循环遍历一遍就可以找到目标数据的下标,但是这样的空间和时间复杂度都是O(n)。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

2023-08-24 16:49:05 217

空空如也

空空如也

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

TA关注的人

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