LeetCode探索 Go语言实现
该专栏以完成Leetcode探索为主,将按照以下步骤进行。数组与字符串、链表、队列和栈、哈希表、二分查找、递归I、二叉树、二叉搜索树、N叉数、前缀树、初级算法、中级算法等。起哄N叉树、前缀树或可能跳过,不知道有啥样还。。
Kylin_Mountain
A golang programer.
展开
-
leetcode 探索 哈希表 快乐数
题目编写一个算法来判断一个数 n 是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果 可以变为 1,那么这个数就是快乐数。如果 n 是快乐数就返回 True ;不是,则返回 False 。示例:输入:19输出:true解释:1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001^2 + 0^2 + 0^2 = 1分析这原创 2020-07-11 08:58:45 · 156 阅读 · 0 评论 -
leetcode 探索 哈希表 两个数组的交集
题目给定两个数组,编写一个函数来计算它们的交集。示例 1:输入:nums1 = [1,2,2,1], nums2 = [2,2]输出:[2]示例 2:输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出:[9,4]说明:输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。分析通过遍历一遍数组1,然后加入到map中。这样再遍历数组2,遇到数组1中有的,就加入结果集,同时要注意到题目要求结果集是唯一的,那么我们在遇到过之后,就要把map中原创 2020-07-11 08:50:41 · 184 阅读 · 0 评论 -
leetcode 探索 哈希表 只出现一次的数字
题目给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4分析此题有两种解法,第一种借用辅助空间来实现,遍历一遍记录每个元素出现的次数。再遍历一次,找出只出现一次的元素。第二种就比较巧妙了,使用了位运算异或,即所有数如果相同,那么他们的结果就会为0,因为相同。所以把所有原创 2020-07-11 08:28:34 · 172 阅读 · 0 评论 -
leetcode探索 哈希表 存在重复元素
题目给定一个整数数组,判断是否存在重复元素。如果任意一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: truehttps://leetcode-cn.com/explore/learn/card/hash-table/204/practical-application-hash-set/805/分析使用hashmap,循环时候,判断当前数值是否已经在map中了。解法func containsDup原创 2020-07-11 08:21:29 · 242 阅读 · 0 评论 -
leetcode 探索 队列与栈 用队列实现栈
题目使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空分析用go里的slice就好了。解法type MyStack struct { Space []int}/** Initialize your data structure here. */func Constructor() MyStack { return MyStack{}}/** Push ele原创 2020-07-08 23:36:17 · 105 阅读 · 0 评论 -
leetcode 探索 队列与栈 用栈实现队列
题目使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。分析用两个栈即可实现队列,push不变,只要在pop时候把push的栈,导入到另外一个栈,即实现了栈的倒置,也就是队列。A栈后进先出,比如push进去1 2 3 4 5,那么出栈就是5 4 3 2 1。将出栈的元素再入栈到栈B,则变成5 4 3 2 1。所以1又到了第一位。解法type MyQueue s原创 2020-07-08 23:29:06 · 109 阅读 · 0 评论 -
leetcode 探索队列与栈 克隆图
题目给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node { public int val; public List<Node> neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = 2),以此类推。该图在测试用例中使用邻接列表表示。邻接列表 是用原创 2020-07-07 08:53:11 · 132 阅读 · 0 评论 -
leetcode 探索队列与栈 逆波兰表达式
题目根据 逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明:整数除法只保留整数部分。给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。示例 1:输入: [“2”, “1”, “+”, “3”, “*”]输出: 9解释: 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9分析逆波兰表达式,其实就是扫描到运算符的时候,就从栈里弹出两个元素进行计算,计算原创 2020-07-03 08:36:59 · 100 阅读 · 0 评论 -
leetcode 探索队列与栈 每日温度
题目请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。分析这个题第一个想法是双指针,即从左侧向原创 2020-07-03 08:33:39 · 192 阅读 · 0 评论 -
leetcode探索队列与栈 有效的括号
题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true分析这题比较简单,使用栈的LIFO的特性,如果是左边的括号就进栈,如果是右边的括号,就与栈顶元素比较,是他的另外一边,就弹栈。继续前进,利用了括号成对的特性,即最内层的左括号原创 2020-07-03 08:26:40 · 124 阅读 · 0 评论 -
leetcode 探索队列与栈 最小栈
题目设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,nu原创 2020-07-03 08:21:26 · 119 阅读 · 0 评论 -
leetcode 探索 队列与栈 完全平方数
题目给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.分析仍然是广度优先搜索BFS,注意step的增加,要每一轮或者说每一圈搜索结束后,再增长。BFS三大核心,visited,queue,step。解法func numSquares(n int原创 2020-07-03 00:22:46 · 156 阅读 · 0 评论 -
leetcode 探索 队列与栈 打开转盘锁
题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’ 。每个拨轮可以自由旋转:例如把 ‘9’ 变为 ‘0’,‘0’ 变为 ‘9’ 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 ‘0000’ ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨轮的数字和列表里的任何一个元素相同,这个锁将会被永久锁定,无法再被旋转。字符串 target 代表可以解锁的数原创 2020-07-01 00:01:06 · 103 阅读 · 0 评论 -
leetcode 每日打卡 用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]示例 2:输入:[“CQueue”,“deleteHead”,“appendTai原创 2020-06-30 14:59:30 · 252 阅读 · 0 评论 -
leetcode 探索 队列与栈 岛屿数量
题目给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3解释: 每座岛屿只能由水平和/或竖直方向上相邻的陆地连接而成。来源:力扣(LeetCode)链接:https://leetc原创 2020-06-30 09:29:11 · 193 阅读 · 0 评论 -
leetcode 1496 判断路径是否相交
题目给你一个字符串 path,其中 path[i] 的值可以是 ‘N’、‘S’、‘E’ 或者 ‘W’,分别表示向北、向南、向东、向西移动一个单位。机器人从二维平面上的原点 (0, 0) 处开始出发,按 path 所指示的路径行走。如果路径在任何位置上出现相交的情况,也就是走到之前已经走过的位置,请返回 True ;否则,返回 False 。示例1输入:path = “NES”输出:false解释:该路径没有在任何位置相交。提示:1 <= path.length <= 10^原创 2020-06-29 22:43:41 · 1042 阅读 · 0 评论 -
leetcode 215 数组中的第K个最大元素 Go实现
题目未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入: [3,2,1,5,6,4] 和 k = 2输出: 5示例 2:输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/kth-largest-elem原创 2020-06-29 09:05:37 · 301 阅读 · 0 评论 -
leetcode 探索 队列和栈 设计循环队列
题目设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实现应该支持如下操作:MyCircularQueue(k): 构造器,设置队列长度为 k 。Front: 从队首获取元素。如果队列为空,返回原创 2020-06-28 23:54:58 · 297 阅读 · 0 评论 -
leetcode 5499 检查数组对是否可以被K整除
题目给你一个整数数组 arr 和一个整数 k ,其中数组长度是偶数,值为 n 。现在需要把数组恰好分成 n / 2 对,以使每对数字的和都能够被 k 整除。如果存在这样的分法,请返回 True ;否则,返回 False 。示例 1:输入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5输出:true解释:划分后的数字对为 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。来源:力扣(LeetCode)链接:https://leetcode-cn原创 2020-06-28 22:39:10 · 309 阅读 · 0 评论 -
leetcode 探索 链表 复制带随机指针的链表
题目给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的节点索引(范围从 0 到 n-1);如果不指向任何节点,则为 null 。示例1:输入:head = [[7,null],[13,0],[11,4],[10,2],[原创 2020-06-27 12:06:23 · 102 阅读 · 0 评论 -
leetcode 探索 链表 旋转链表
题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2输出: 4->5->1->2->3->NULL解释:向右旋转 1 步: 5->1->2->3->4->NULL向右旋转 2 步: 4->5->1->2->3->NULL示例 2:输入: 0->1->2-原创 2020-06-27 11:22:01 · 96 阅读 · 0 评论 -
leetcode 探索 链表 扁平化多级双向链表
题目多级双向链表中,除了指向下一个节点和前一个节点指针之外,它还有一个子链表指针,可能指向单独的双向链表。这些子列表也可能会有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。给你位于列表第一级的头节点,请你扁平化列表,使所有结点出现在单级双链表中。输入:head = [1,2,3,4,5,6,null,null,null,7,8,9,10,null,null,11,12]输出:[1,2,3,7,8,11,12,9,10,4,5,6]解释:输入的多级列表如下图所示:扁平原创 2020-06-26 17:53:22 · 213 阅读 · 0 评论 -
leetcode 探索 链表 两数相加
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists分析合并链表,此题比较简单,但要注意的事情有以下三点。该位上的和如果大于等于10的话,需要进位,那么需要将原创 2020-06-26 17:18:36 · 98 阅读 · 0 评论 -
leetcode 探索 链表 合并两个有序链表
题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/merge-two-sorted-lists分析新建一个头节点,然后两两比较就好了,谁小谁链接上,只是需要判断边界条件。解法/** * Defini原创 2020-06-26 16:39:24 · 80 阅读 · 0 评论 -
leetcode 探索 链表 设计链表II双向链表
题目设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表原创 2020-06-26 16:07:57 · 221 阅读 · 0 评论 -
leetcode 面试题02.01 移除重复节点
题目编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。示例1:输入:[1, 2, 3, 3, 2, 1]输出:[1, 2, 3]示例2:输入:[1, 1, 1, 1, 2]输出:[1, 2]提示:链表长度在[0, 20000]范围内。链表元素在[0, 20000]范围内。进阶:如果不得使用临时缓冲区,该怎么解决?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicate-node-lcc原创 2020-06-26 11:52:18 · 187 阅读 · 0 评论 -
leetcode 探索 链表 回文链表
题目请判断一个链表是否为回文链表。示例 1:输入: 1->2输出: false示例 2:输入: 1->2->2->1输出: true分析这题有两个解法,一是新建一个数组,将每个链表元素,加入到数组中,然后通过双指针,一个指向首,一个指向尾,依次比较,空间复杂度O(N), 时间复杂度O(N+N/2)二是通过快慢指针,迅速定位到中心点,然后翻转中心点后的链表,然后将翻转后的链表与初始链表的从头开始比较。这是比较难以想到的解法。解法/** * Def原创 2020-06-26 11:00:46 · 79 阅读 · 0 评论 -
leetcode 探索 链表 奇偶链表
题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。示例 1:输入: 1->2->3->4->5->NULL输出: 1->3->5->2->4->NULL应当保持奇数节点和偶数节点的相对顺序。链表的第一个节点视为奇数节点,第二个原创 2020-06-25 16:43:58 · 284 阅读 · 0 评论 -
leetcode 探索 链表 移除链表元素
题目删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5来源Leetcode: https://leetcode-cn.com/problems/remove-linked-list-elements/分析遇到这种经典的链表题的时候,我懵逼了,我不会。。。绕头脑,稍微不注意就会绕进去了,就不知道指针指哪里了。所以这题我要好好分析分析,好好原创 2020-06-25 15:40:37 · 143 阅读 · 0 评论 -
leetcode 探索 链表 反转链表
题目反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用两种方法解决这道题?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-linked-list分析反转链表,一遍循环,为了让2指向1,又不丢失下一个节点,就要让2的下一个节点先取出来存为temp,然后在原创 2020-06-25 11:56:08 · 107 阅读 · 0 评论 -
leetcode 探索 链表 删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list分析双原创 2020-06-24 23:19:53 · 125 阅读 · 0 评论 -
leetcode 探索 链表 相交链表
题目编写一个程序,找到两个单链表相交的起始节点。如下面的两个链表:在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [原创 2020-06-24 22:45:22 · 98 阅读 · 0 评论 -
leecode 探索 链表 环形链表 II
题目给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。说明:不允许修改给定的链表。示例 1:输入:head = [3,2,0,-4], pos = 1输出:tail connects to node index 1解释:链表中有一个环,其尾部连接到第二个节点。来源:力扣(LeetCode)链接:https://leet原创 2020-06-24 09:43:58 · 129 阅读 · 0 评论 -
leetcode 探索 链表 环形链表
题目给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4], pos = 1输出:true解释:链表中有一个环,其尾部连接到第二个节点。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/linked-list-cycle分析如果有环,那么用双指针,一个每次走两步,原创 2020-06-24 00:11:59 · 137 阅读 · 0 评论 -
leetcode 探索 链表 设计链表
题目设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能:get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。addAtHead(val):在链表的第一个元素之前添加一个值为 val 的节点。插入后,新节点将成为链表原创 2020-06-23 09:05:46 · 232 阅读 · 0 评论 -
leetcode 探索 数组和字符串 长度最小的子数组
题目给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组 [4,3] 是该条件下的长度最小的连续子数组。进阶:如果你已经完成了O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。来源:力扣(LeetCode)链接:https://leetcode-cn.com/原创 2020-06-21 14:36:59 · 210 阅读 · 0 评论 -
leetcode 探索 数组和字符串 删除排序数组中的重复项
题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-d原创 2020-06-21 11:39:49 · 128 阅读 · 0 评论 -
leetcode 探索 数组和字符串 反转字符串中的单词 III
题目给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: “Let’s take LeetCode contest”输出: “s’teL ekat edoCteeL tsetnoc”注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/reverse-words-in-a-string-iii分析反转每个单词的字符原创 2020-06-20 23:51:03 · 96 阅读 · 0 评论 -
leetcode 探索 数组和字符串 寻找旋转排序数组中的最小值
题目假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。请找出其中最小的元素。你可以假设数组中不存在重复元素。示例 1:输入: [3,4,5,1,2]输出: 1示例 2:输入: [4,5,6,7,0,1,2]输出: 0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-a原创 2020-06-20 22:45:49 · 122 阅读 · 0 评论 -
leetcode 探索 数组和字符串 移动零
题目:给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。分析:双指针,一个指针a指向当前的0,一个指针b指向不为0的。遇到不为0,就交换这俩a和b的上值,a指针前进,b指针也继续前进。直到b指针遇到下一个不为0的,继续交换。这过程中指针b一直移动。核心就是交换遇到的第一个不为0的值。这样就能把0移到最后了原创 2020-06-20 19:59:59 · 262 阅读 · 0 评论