
算法学习资料
文章平均质量分 84
经典算法总结、优秀的算法博客记录
他人是一面镜子,保持谦虚的态度
别低头,王冠会掉;别流泪,坏人会笑
展开
-
简历应该这么写
简历篇幅首先程序员的简历力求简洁明了,不用设计上要过于复杂。对于校招生,一页简历就够了,社招的话两页简历便可。有的校招生说自己的经历太多了,简历要写出两三页,实际上基本是无关内容太多或者描述太啰唆,例如多过的校园活动,学生会经历等等。既然是面试技术岗位,其他的方面一笔带过就好。#谨慎使用“精通”两字应届生或者刚毕业的程序员在写简历的时候切记不要写精通某某语言,如果真的学的很好,推荐写“熟悉”或者“掌握”。但是有的同学可能仅仅使用一些语言例如go或者python写了一些小东西,或.转载 2021-08-31 11:43:08 · 6643 阅读 · 1 评论 -
七、二叉树(20): 最大二叉树
力扣题目地址(opens new window)给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。示例 :提示:给定的数组的大小在 [1, 1000] 之间。一、思路最大二叉树的构建过程如下:构造树一般采用的是前序遍历,因为先构造中间节点,然...转载 2021-10-04 13:05:37 · 1105 阅读 · 0 评论 -
七、二叉树(19): 从中序与后序遍历序列构造二叉树
力扣题目链接(opens new window)根据一棵树的中序遍历与后序遍历构造二叉树。注意: 你可以假设树中没有重复的元素。例如,给出中序遍历 inorder =[9,3,15,20,7] 后序遍历 postorder = [9,15,7,20,3] 返回如下的二叉树:一、思路首先回忆一下如何根据两个顺序构造一个唯一的二叉树,相信理论知识大家应该都清楚,就是以 后序数组的最后一个元素为切割点,先切中序数组,根据中序数组,反过来在切后序数组。一层一层切下去,每次...转载 2021-10-04 10:14:11 · 571 阅读 · 0 评论 -
七、二叉树(18): 路径总和
力扣题目链接(opens new window)给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和。说明:叶子节点是指没有子节点的节点。示例: 给定如下二叉树,以及目标和 sum = 22返回 true, 因为存在目标和为 22 的根节点到叶子节点的路径 5->4->11->2。一、思路这道题我们要遍历从根节点到叶子节点的的路径看看总和是不是目标和。1.1 递归可以使用深度优先遍历...转载 2021-10-04 09:48:25 · 546 阅读 · 0 评论 -
七、二叉树(17):找树左下角的值
力扣题目链接给定一个二叉树,在树的最后一行找到最左边的值。示例 1:示例 2:一、思路本地要找出树的最后一行找到最左边的值。此时大家应该想起用层序遍历是非常简单的了,反而用递归的话会比较难一点。我们依然还是先介绍递归法。二、递归咋眼一看,这道题目用递归的话就就一直向左遍历,最后一个就是答案呗?没有这么简单,一直向左遍历到最后一个,它未必是最后一行啊。我们来分析一下题目:在树的最后一行找到最左边的值。首先要是最后一行,然后是最左边的值。如果使用递归法,如何判断是..转载 2021-09-30 17:10:24 · 648 阅读 · 0 评论 -
七、二叉树(16):左叶子之和
力扣题目链接(opens new window)计算给定二叉树的所有左叶子之和。示例:一、思路首先要注意是判断左叶子,不是二叉树左侧节点,所以不要上来想着层序遍历。因为题目中其实没有说清楚左叶子究竟是什么节点,那么我来给出左叶子的明确定义:如果左节点不为空,且左节点没有左右孩子,那么这个节点就是左叶子大家思考一下如下图中二叉树,左叶子之和究竟是多少?其实是0,因为这棵树根本没有左叶子!那么判断当前节点是不是左叶子是无法判断的,必须要通过节点的父节点来判断...转载 2021-09-30 16:34:23 · 700 阅读 · 0 评论 -
七、二叉树(14):二叉树周末总结
周一本周刚开始我们讲解了判断二叉树是否对称的写法,二叉树:我对称么?(opens new window)。这道题目的本质是要比较两个树(这两个树是根节点的左右子树),遍历两棵树而且要比较内侧和外侧节点,所以准确的来说是一个树的遍历顺序是左右中,一个树的遍历顺序是右左中。而本题的迭代法中我们使用了队列,需要注意的是这不是层序遍历,而且仅仅通过一个容器来成对的存放我们要比较的元素,认识到这一点之后就发现:用队列,用栈,甚至用数组,都是可以的。那么做完本题之后,在看如下两个题目。1...转载 2021-09-30 13:25:45 · 192 阅读 · 0 评论 -
七、二叉树(13):二叉树的所有路径
力扣题目链接(opens new window)给定一个二叉树,返回所有从根节点到叶子节点的路径。说明: 叶子节点是指没有子节点的节点。示例:一、思路这道题目要求从根节点到叶子的路径,所以需要前序遍历,这样才方便让父节点指向孩子节点,找到对应的路径。在这道题目中将第一次涉及到回溯,因为我们要把路径记录下来,需要回溯来回退一一个路径在进入另一个路径。前序遍历以及回溯的过程如图:我们先使用递归的方式,来做前序遍历。要知道递归和回溯就是一家的,本题也需要回溯。..转载 2021-09-25 20:22:04 · 920 阅读 · 0 评论 -
七、二叉树(12):平衡二叉树
力扣题目链接(opens new window)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例 1:给定二叉树 [3,9,20,null,null,15,7]返回 true 。示例 2:给定二叉树 [1,2,2,3,3,null,null,4,4]返回 false 。一、题外话咋眼一看这道题目和104.二叉树的最大深度(opens new window...转载 2021-09-22 22:00:47 · 418 阅读 · 0 评论 -
七、二叉树(11):完全二叉树的节点个数
力扣题目链接(opens new window)给出一个完全二叉树,求出该树的节点个数。示例 1:输入:root = [1,2,3,4,5,6] ; 输出:6 ;示例 2:输入:root = [] ; 输出:0 ;示例 3:输入:root = [1] ; 输出:1 ;提示:树中节点的数目范围是[0, 5 * 10^4] 0 <= Node.val <= 5 * 10^4 题目数据保证输入的树是 完全二叉树一、思路本篇给出按照普通二叉树的求法.转载 2021-09-16 16:48:28 · 675 阅读 · 0 评论 -
七、二叉树(10):二叉树的最小深度
力扣题目链接(opens new window)给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。说明:叶子节点是指没有子节点的节点。示例: 给定二叉树[3,9,20,null,null,15,7],返回它的最小深度 2.一、思路看完了这篇104.二叉树的最大深度(opens new window),再来看看如何求最小深度。直觉上好像和求最大深度差不多,其实还是差不少的。遍历顺序上依然是后序遍历(因为要比较递归返回之后...转载 2021-09-16 16:13:48 · 320 阅读 · 0 评论 -
七、二叉树(9):二叉树的最大深度
看完本篇可以一起做了如下两道题目:104.二叉树的最大深度 559.n叉树的最大深度力扣题目链接(opens new window)给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例: 给定二叉树 [3,9,20,null,null,15,7],返回它的最大深度 3 。一、递归法本题可以使用前序(中左右),也可以使用后序遍历(左右中),使用前序求的就是深度,使用后序求的是高度。..转载 2021-09-16 15:41:59 · 439 阅读 · 0 评论 -
七、二叉树(8):对称二叉树
力扣题目链接(opens new window)给定一个二叉树,检查它是否是镜像对称的。一、思路首先想清楚,判断对称二叉树要比较的是哪两个节点,要比较的可不是左右节点!对于二叉树是否对称,要比较的是根节点的左子树与右子树是不是相互翻转的,理解这一点就知道了其实我们要比较的是两个树(这两个树是根节点的左右子树),所以在递归遍历的过程中,也是要同时遍历两棵树。那么如何比较呢?比较的是两个子树的里侧和外侧的元素是否相等。如图所示:那么遍历的顺序应该是什么样的呢?本题...转载 2021-09-16 15:25:25 · 201 阅读 · 0 评论 -
七、二叉树(7):本周小结
周一本周我们开始讲解了二叉树,在关于二叉树,你该了解这些!(opens new window)中讲解了二叉树的理论基础。有同学会把红黑树和二叉平衡搜索树弄分开了,其实红黑树就是一种二叉平衡搜索树,这两个树不是独立的,所以C++中map、multimap、set、multiset的底层实现机制是二叉平衡搜索树,再具体一点是红黑树。对于二叉树节点的定义,C++代码如下:struct TreeNode { int val; TreeNode *left; TreeNode .转载 2021-09-16 13:34:08 · 134 阅读 · 0 评论 -
七、二叉树(6):翻转二叉树
力扣题目链接(opens new window)翻转一棵二叉树。这道题目背后有一个让程序员心酸的故事,听说 Homebrew的作者Max Howell,就是因为没在白板上写出翻转二叉树,最后被Google拒绝了。(真假不做判断,权当一个乐子哈)1、题外话这道题目是非常经典的题目,也是比较简单的题目(至少一看就会)。但正是因为这道题太简单,一看就会,一些同学都没有抓住起本质,稀里糊涂的就把这道题目过了。如果做过这道题的同学也建议认真看完,相信一定有所收获!2、思路我们之前..转载 2021-09-13 19:52:50 · 697 阅读 · 0 评论 -
七、二叉树(5):二叉树的层序遍历
学会二叉树的层序遍历,可以一口气打完以下十题:102.二叉树的层序遍历 107.二叉树的层次遍历II 199.二叉树的右视图 637.二叉树的层平均值 429.N叉树的前序遍历 515.在每个树行中找最大值 116.填充每个节点的下一个右侧节点指针 117.填充每个节点的下一个右侧节点指针II 104.二叉树的最大深度 111.二叉树的最小深度在之前写过这篇文章二叉树:层序遍历登场!(opens new window),可惜当时只打了5个,还不够,再给我一次机会,我打十个!...转载 2021-09-11 22:51:25 · 6031 阅读 · 0 评论 -
七、二叉树(4):二叉树的统一迭代法
此时我们在二叉树:一入递归深似海,从此offer是路人(opens new window)中用递归的方式,实现了二叉树前中后序的遍历。 在二叉树:听说递归能做的,栈也能做!(opens new window)中用栈实现了二叉树前后中序的迭代遍历(非递归)。之后我们发现迭代法实现的先中后序,其实风格也不是那么统一,除了先序和后序,有关联,中序完全就是另一个风格了,一会用栈遍历,一会又用指针来遍历。 实践过的同学,也会发现使用迭代法实现先中后序遍历,很难写...转载 2021-09-11 20:49:13 · 412 阅读 · 0 评论 -
七、二叉树(3):二叉树的迭代遍历
看完本篇大家可以使用迭代法,再重新解决如下三道leetcode上的题目:144.二叉树的前序遍历 94.二叉树的中序遍历 145.二叉树的后序遍历为什么可以用迭代法(非递归的方式)来实现二叉树的前后中序遍历呢?我们在栈与队列:匹配问题都是栈的强项(opens new window)中提到了,递归的实现就是:每一次递归调用都会把函数的局部变量、参数值和返回地址等压入调用栈中,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。此时大家应该.转载 2021-09-11 20:14:20 · 225 阅读 · 0 评论 -
七、二叉树(2):二叉树的递归遍历
这次我们要好好谈一谈递归,为什么很多同学看递归算法都是 “一看就会,一写就废”。主要是对递归不成体系,没有方法论,每次写递归算法 ,都是靠玄学来写代码,代码能不能编过都靠运气。本篇将介绍前后中序的递归写法,一些同学可能会感觉很简单,其实不然,我们要通过简单题目把方法论确定下来,有了方法论,后面才能应付复杂的递归。这里帮助大家确定下来递归算法的三个要素。每次写递归,都按照这三要素来写,可以保证大家写出正确的递归算法! 确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就在.转载 2021-09-11 19:17:59 · 156 阅读 · 0 评论 -
七、二叉树(1):二叉树理论基础
说道二叉树,大家对于二叉树其实都很熟悉了,本文呢我也不想教科书式的把二叉树的基础内容在啰嗦一遍,所以一下我讲的都是一些比较重点的内容。相信只要耐心看完,都会有所收获。一、二叉树的种类在我们解题过程中二叉树有两种主要的形式:满二叉树和完全二叉树。1.1 满二叉树满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。如图所示:这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。1.2完全二叉树什么是..转载 2021-09-10 20:55:12 · 272 阅读 · 0 评论 -
六、栈与队列(9):总结
首先我们在栈与队列:来看看栈和队列不为人知的一面(opens new window)中讲解了栈和队列的理论基础。里面提到了灵魂四问:C++中stack,queue 是容器么? 我们使用的stack,queue是属于那个版本的STL? 我们使用的STL中stack,queue是如何实现的? stack,queue 提供迭代器来遍历空间么?相信不仅仅是C++中有这些问题,那么大家使用其他编程语言,也可以考虑一下这四个问题,栈和队列是如何实现的。栈与队列是我们熟悉的不能再熟悉的数据结构,但它们.转载 2021-09-10 20:11:23 · 420 阅读 · 0 评论 -
六、栈与队列(8):前 K 个高频元素
力扣题目链接(opens new window)给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2 ; 输出: [1,2]示例 2:输入: nums = [1], k = 1 ; 输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小。 题目数据保证答案唯一,换句话说,数转载 2021-09-10 17:13:11 · 164 阅读 · 0 评论 -
六、栈与队列(7):滑动窗口最大值
力扣题目链接(opens new window)给定一个数组 nums,有一个大小为k的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?提示:1 <= nums.length <= 10^5 -10^4<= nums[i]<= 10^4 1 <= k<= nums.length二、思路这是使用单调...转载 2021-09-10 16:29:01 · 235 阅读 · 0 评论 -
六、栈与队列(6):逆波兰表达式求值
力扣题目链接(opens new window)根据 逆波兰表示法,求表达式的值。有效的运算符包括+ , - , * , /。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例1:输入: ["2", "1", "+", "3", " * "] 输出: 9 解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9示例2...转载 2021-09-10 16:18:37 · 229 阅读 · 0 评论 -
六、栈与队列(5):删除字符串中的所有相邻重复项
力扣题目链接(opens new window)给出由小写字母组成的字符串S,重复项删除操作会选择两个相邻且相同的字母,并删除它们。在 S 上反复执行重复项删除操作,直到无法继续删除。在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。示例:输入:"abbaca" 输出:"ca" 解释:例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所.转载 2021-09-10 15:24:06 · 568 阅读 · 0 评论 -
六、栈与队列(4):有效的括号
力扣题目链接(opens new window)给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。示例 1:输入: "()" 输出: true示例2:输入: "()[]{}" 输出: true示例3:输入: "(]" 输出: false示例4:输入: "([)]" 输出: false示例5...转载 2021-09-10 10:08:54 · 332 阅读 · 0 评论 -
六、栈与队列(3):用队列实现栈
力扣题目链接(opens new window)使用队列实现栈的下列操作:push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是push to back, peek/pop from front, size, 和is empty这些操作是合法的。 你所使用的语言也许不支持队列。你可以使用 list 或者 dequ...转载 2021-09-10 10:03:20 · 110 阅读 · 0 评论 -
六、栈与队列(2):用栈实现队列
力扣题目链接(opens new window)使用栈实现队列的下列操作:push(x) -- 将一个元素放入队列的尾部。pop() -- 从队列首部移除元素。peek() -- 返回队列首部的元素。empty() -- 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2);queue.peek(); // 返回 1queue.pop(); // 返回 1...转载 2021-09-09 09:30:27 · 148 阅读 · 0 评论 -
六、栈与队列(1):栈与队列理论基础
我想栈和队列的原理大家应该很熟悉了,队列是先进先出,栈是先进后出。如图所示:那么我这里在列出四个关于栈的问题,大家可以思考一下。以下是以C++为例,相信使用其他编程语言的同学也对应思考一下,自己使用的编程语言里栈和队列是什么样的。C++中stack 是容器么? 我们使用的stack是属于那个版本的STL? 我们使用的STL中stack是如何实现的? stack 提供迭代器来遍历stack空间么?相信这四个问题并不那么好回答, 因为一些同学使用数据结构会停留在非常表面上的应用,稍稍往转载 2021-09-09 09:22:03 · 261 阅读 · 0 评论 -
五、双指针法(11):总结
一、数组篇在数组:就移除个元素很难么?(opens new window)中,原地移除数组上的元素,我们说到了数组上的元素,不能真正的删除,只能覆盖。一些同学可能会写出如下代码(伪代码):for (int i = 0; i < array.size(); i++) { if (array[i] == target) { array.erase(i); }}这个代码看上去好像是O(n)的时间复杂度,其实是O(n^2)的时间复杂度,因为erase操作也是.转载 2021-09-09 08:21:23 · 234 阅读 · 0 评论 -
五、双指针法(10):四数之和
力扣题目链接(opens new window)题意:给定一个包含n 个整数的数组nums和一个目标值target,判断nums中是否存在四个元素 a,b,c和 d,使得a + b + c + d的值与target相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例: 给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。 满足要求的四元组集合为: [ [-1, 0, 0, 1], [-2, -1, ...转载 2021-09-09 08:17:56 · 187 阅读 · 0 评论 -
五、双指针法(9):三数之和
力扣题目链接(opens new window)给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]一、思路注意[0, 0, 0, 0] 这组数据(1)哈希解法两...转载 2021-09-09 08:13:56 · 296 阅读 · 0 评论 -
五、双指针法(8):环形链表II
力扣题目链接(opens new window)题意: 给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回null。为了表示给定链表中的环,使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。一、思路这道题目,不仅考察对链表的操作,而且还需要一些数学运算。主要考察两知识点:判断链表是否有环 如果有环,如何找到这个环的入口(1)判断链表是否有环可以使用...转载 2021-09-09 07:53:20 · 122 阅读 · 0 评论 -
五、双指针法(7):链表相交
力扣题目链接(opens new window)给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第k个节点与另一个链表的第j个节点是同一节点(引用完全相同),则这两个链表相交。示例 1:输入:listA = [4,1,8,4,5], listB = [5,0,1,8,4,5]输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不.转载 2021-09-09 07:14:03 · 225 阅读 · 0 评论 -
五、双指针法(6):删除链表的倒数第N个节点
力扣题目链接(opens new window)给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。进阶:你能尝试使用一趟扫描实现吗?示例 1:输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5] 示例 2:输入:head = [1], n = 1 输出:[] 示例 3:输入:head = [1,2], n = 1 输出:[1]二、思路双指针的经典应用,如果要删除倒数第n个节点,让fast移动n步,然后让fas..转载 2021-09-06 11:38:14 · 203 阅读 · 0 评论 -
五、双指针法(5):反转链表
力扣题目链接(opens new window)题意:反转一个单链表。示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL一、思路如果再定义一个新的链表,实现链表元素的反转,其实这是对内存空间的浪费。其实只需要改变链表的next指针的指向,直接将链表反转 ,而不用重新定义一个新的链表,如图所示:之前链表的头节点是元素1, 反转之后头结点就是元素5 ,这里并没有添加或者.转载 2021-09-06 11:34:12 · 616 阅读 · 0 评论 -
五、双指针法(4):翻转字符串里的单词
力扣题目链接(opens new window)给定一个字符串,逐个翻转字符串中的每个单词。示例 1:输入: "the sky is blue"输出:"blue is sky the"示例 2:输入: " hello world! "输出:"world! hello"解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。示例 3:输入: "a good example"输出:"example good a"解释: 如果两个单词间有多余的...转载 2021-09-06 11:24:16 · 294 阅读 · 0 评论 -
五、双指针法(3):替换空格
力扣题目链接(opens new window)请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1: 输入:s = "We are happy."输出:"We%20are%20happy."一、思路如果想把这道题目做到极致,就不要只用额外的辅助空间了!首先扩充数组到每个空格替换成"%20"之后的大小。然后从后向前替换空格,也就是双指针法,过程如下:i指向新长度的末尾,j指向旧长度的末尾。有同学问了,为什么要从后向前填充,从前向后填充不行么? 从前向后填充就.转载 2021-09-06 11:12:45 · 284 阅读 · 0 评论 -
五、双指针法(2):反转字符串
力扣题目链接(opens new window)编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:["h","e","l","l","o"]输出:["o","l","l","e","h"]示例 2:输入:["H","a","n","n","a","h"]输出:["h.转载 2021-09-06 11:01:12 · 659 阅读 · 0 评论 -
五、双指针法(1):移除元素
力扣题目链接(opens new window)给你一个数组 nums和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例2: 给定...转载 2021-09-06 10:55:54 · 426 阅读 · 1 评论