腾讯算法
文章平均质量分 51
腾讯算法
TABE_
这个作者很懒,什么都没留下…
展开
-
2021-09-21142. 环形链表 II(快慢指针+数学)
注:题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2,0,-4], pos = 1输出:返回索引为 1 的链表节点解释:链表中有一个原创 2021-09-21 14:53:55 · 181 阅读 · 0 评论 -
2021-7-19 557. 反转字符串中的单词 III(双指针)
注:题目:给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例:输入:“Let’s take LeetCode contest”输出:“s’teL ekat edoCteeL tsetnoc”提示:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。题解:思路与算法当找到一个单词的时候,我们交换字符串第一个字符与倒数第一个字符,随后交换第二个字符与倒数第二个字符……如此反复,就可以在原空间上翻转单词。复杂度分析时间复杂度:O(N原创 2021-07-19 15:25:15 · 161 阅读 · 0 评论 -
2021-07-19 344. 反转字符串(双指针)
注:题目:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。示例 1:输入:[“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]示例 2:输入:[“H”,“a”,“n”,“n”,“a”,“h”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]原创 2021-07-19 15:21:50 · 260 阅读 · 0 评论 -
2021-7-19 292. Nim 游戏(数学方法)
注:题目:你和你的朋友,两个人一起玩 Nim 游戏:桌子上有一堆石头。你们轮流进行自己的回合,你作为先手。每一回合,轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。假设你们每一步都是最优解。请编写一个函数,来判断你是否可以在给定石头数量为 n 的情况下赢得游戏。如果可以赢,返回 true;否则,返回 false 。示例 1:输入:n = 4输出:false解释:如果堆中有 4 块石头,那么你永远不会赢得比赛;因为无论你拿走 1 块、2 块 还是 3 块石头,最后原创 2021-07-19 11:49:43 · 149 阅读 · 0 评论 -
2021-7-19 238. 除自身以外数组的乘积(乘积列表)
注:题目:给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。示例:输入: [1,2,3,4]输出: [24,12,8,6]说明:请不要使用除法,且在 O(n) 时间复杂度内完成此题。进阶:你可以在常数空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组不被视为额外空间。)题解:方法一:左右乘积列表(不符合要求)思路我们不必将所有数字的乘原创 2021-07-19 11:18:00 · 130 阅读 · 0 评论 -
2021-7-18 237. 删除链表中的节点(与下一个节点交换)
注:题目:请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。示例 1:输入:head = [4,5,1,9], node = 5输出:[4,1,9]解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入:head = [4,5,1,9], node = 1输出:[4,5,9]解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -原创 2021-07-18 16:34:56 · 115 阅读 · 0 评论 -
2021-7-18 236. 二叉树的最近公共祖先(带返回值的递归)
注:题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出:3解释:节点 5 和节点 1 的最近公共祖先是节点 3 。示例 2:输入:root = [3,5,1,6,2,0,8,原创 2021-07-18 16:07:25 · 98 阅读 · 0 评论 -
2021-7-18 235. 二叉搜索树的最近公共祖先(递归+迭代)
注:题目:给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例 1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6解释: 节点 2 和节点 8 的最近公共祖先是 6。示例 2:输入: root = [6,2,8,0,4,7原创 2021-07-18 15:28:03 · 152 阅读 · 0 评论 -
2021-7-17 231. 2 的幂(位操作,n & (n - 1),n & (-n))
注:n & (n - 1):该位运算技巧可以直接将 n 二进制表示的最低位 1 移除。n & (-n):该位运算技巧可以直接获取 n 二进制表示的最低位的 1。题目:给你一个整数 n,请你判断该整数是否是 2 的幂次方。如果是,返回 true ;否则,返回 false 。如果存在一个整数 x 使得 n == 2x ,则认为 n 是 2 的幂次方。示例 1:输入:n = 1输出:true解释:20 = 1示例 2:输入:n = 16输出:true解释:24 = 16原创 2021-07-17 16:36:39 · 302 阅读 · 0 评论 -
2021-7-17 230. 二叉搜索树中第K小的元素(中序遍历,迭代实现与递归实现)
注:题目:给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 个最小元素(从 1 开始计数)。示例 1:输入:root = [3,1,4,null,2], k = 1输出:1示例 2:输入:root = [5,3,6,2,4,null,null,1], k = 3输出:3提示:树中的节点数为 n 。1 <= k <= n <= 1040 <= Node.val <= 104进阶:如果二叉搜索树经常被修改(插入/删除原创 2021-07-17 16:12:57 · 185 阅读 · 0 评论 -
2021-7-17 217. 存在重复元素(哈希表)
注:题目:给定一个整数数组,判断是否存在重复元素。如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。示例 1:输入: [1,2,3,1]输出: true示例 2:输入: [1,2,3,4]输出: false示例 3:输入: [1,1,1,3,3,4,3,2,4,2]输出: true题解:对于数组中每个元素,我们将它插入到哈希表中。如果插入一个元素时发现该元素已经存在于哈希表中,则说明存在重复的元素。复杂度分析时间复杂度:原创 2021-07-17 15:24:10 · 309 阅读 · 0 评论 -
2021-7-16 215. 数组中的第K个最大元素(手写堆)
注:注意堆中元素的插入和删除的操作是不一样的,插入是自底向上递归,删除是自顶向下递归。题目:给定整数数组 nums 和整数 k,请返回数组中第 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提示:1 <= k <= nums.length <= 104-104原创 2021-07-16 11:31:10 · 148 阅读 · 0 评论 -
2021-07-15 206. 反转链表(迭代、递归)
注:题目:给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例 1:输入:head = [1,2,3,4,5]输出:[5,4,3,2,1]示例 2:输入:head = [1,2]输出:[2,1]示例 3:输入:head = []输出:[]提示:链表中节点的数目范围是 [0, 5000]-5000 <= Node.val <= 5000进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题?题解:方法一 迭代复杂度分析时间复杂度原创 2021-07-15 12:40:08 · 128 阅读 · 0 评论 -
2021-7-15 169. 多数元素(摩尔投票)
注:题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。示例 1:输入:[3,2,3]输出:3示例 2:输入:[2,2,1,1,1,2,2]输出:2进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1) 的算法解决此问题。题解:算法我们维护一个候选众数temp 和它出现的次数 count。初始时 temp 可以为任意值,count 为 0;我们遍历数组 n原创 2021-07-15 12:06:12 · 108 阅读 · 0 评论 -
2021-7-15 160. 相交链表(双指针)
注:实际上最多只需要遍历每个链表一遍,就会找到交点,或者返回null。题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。注意,函数返回结果后,链表必须 保持其原始结构 。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Intersected at ‘8’解释:相交节点的原创 2021-07-15 11:46:04 · 145 阅读 · 0 评论 -
2021-07-15 155. 最小栈(辅助栈)
注:题目:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop() —— 删除栈顶的元素。top() —— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:[“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”][[],[-2],[0],[-3],[],[],[],[]]输出:[null,null,null,n原创 2021-07-15 11:34:49 · 298 阅读 · 0 评论 -
2021-7-14 148. 排序链表(归并排序)
注:题目:给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。进阶:你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?示例 1:输入:head = [4,2,1,3]输出:[1,2,3,4]示例 2:输入:head = [-1,5,3,4,0]输出:[-1,0,3,4,5]示例 3:输入:head = []输出:[]提示:链表中节点的数目在范围 [0, 5 * 104] 内-105 <= Node.val <=原创 2021-07-14 11:36:11 · 141 阅读 · 0 评论 -
2021-7-13 146. LRU 缓存机制(哈希表+双向链表)
注:1.不能使用vector的原因在于无法实现O(1)复杂度的删除。2.在双向链表的实现中,使用一个伪头部(dummy head)和伪尾部(dummy tail)标记界限,这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。题目:运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字原创 2021-07-13 11:19:57 · 286 阅读 · 0 评论 -
2021-7-12 142. 环形链表 II(数学方法+快慢指针)
注:当两指针相遇时,slow指针还没有在环中走满一圈,fast指针套了slow指针n圈题目:给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。说明:不允许修改给定的链表。进阶:你是否可以使用 O(1) 空间解决此题?示例 1:输入:head = [3,2原创 2021-07-12 16:53:17 · 116 阅读 · 0 评论 -
2021-07-12 141. 环形链表(快慢指针)
注:题目:给定一个链表,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。进阶:你能用 O(1)(即,常量)内存解决此问题吗?示例 1:输入:head = [3,2,0,原创 2021-07-12 16:00:06 · 169 阅读 · 0 评论 -
2021-07-12 136. 只出现一次的数字(位运算,异或操作)
注:题目:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4题解:对于这道题,可使用异或运算 ⊕。异或运算有以下三个性质。任何数和 0 做异或运算,结果仍然是原来的数,即a⊕0=a。任何数和其自身做异或运算,结果是 0,即 a⊕a=0。异或运算满足交换律和结合律,即原创 2021-07-12 15:42:43 · 252 阅读 · 0 评论 -
2021-7-11 124. 二叉树中的最大路径和(递归,节点贡献)
注:题目:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例 1:输入:root = [1,2,3]输出:6解释:最优路径是 2 -> 1 -> 3 ,路径和为 2 + 1 + 3 = 6示例 2:输入:root = [-10,9,20,null,null,1原创 2021-07-12 11:14:21 · 245 阅读 · 0 评论 -
2021-7-10 122. 买卖股票的最佳时机 II(动态规划)
注:题目:给定一个数组 prices ,其中 prices[i] 是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: prices = [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。随后,在第 4 天(股票原创 2021-07-12 10:08:48 · 123 阅读 · 0 评论 -
2021-7-10 121. 买卖股票的最佳时机(一次遍历,类似于动态规划)
注:题目:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。示例 1:输入:[7,1,5,3,6,4]输出:5解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不原创 2021-07-11 21:47:53 · 97 阅读 · 0 评论 -
2021-7-10 104. 二叉树的最大深度(带返回值的递归)
注:题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。题解:思路与算法如果我们知道了左子树和右子树的最大深度 ll 和 rr,那么该二叉树的最大深度即为max(l,r) + 1。而左子树和右子树的最大深度又可以以同样的方式进行计算。因此原创 2021-07-11 21:38:59 · 248 阅读 · 0 评论 -
2021-7-9 89. 格雷编码(格雷码的定义)
注:题目:格雷编码是一个二进制数字系统,在该系统中,两个连续的数值仅有一个位数的差异。给定一个代表编码总位数的非负整数 n,打印其格雷编码序列。即使有多个不同答案,你也只需要返回其中一种。格雷编码序列必须以 0 开头。示例 1:输入: 2输出: [0,1,3,2]解释:00 - 001 - 111 - 310 - 2对于给定的 n,其格雷编码序列并不唯一。例如,[0,2,3,1] 也是一个有效的格雷编码序列。00 - 010 - 211 - 301 - 1示例 2:输原创 2021-07-11 21:29:30 · 1524 阅读 · 0 评论 -
2021-7-8 88. 合并两个有序数组(逆向双指针)
注:题目:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。初始化 nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自 nums2 的元素。示例 1:输入:nums1 = [1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]示例 2:输入:nums1 = [1原创 2021-07-10 20:45:08 · 325 阅读 · 0 评论 -
2021-7-8 78. 子集(回溯)
注:题目:给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。示例 1:输入:nums = [1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例 2:输入:nums = [0]输出:[[],[0]]提示:1 <= nums.length <= 10-10 <= nums[i] <= 10nums 中的所有元素原创 2021-07-10 19:52:53 · 104 阅读 · 0 评论 -
2021-7-7 70. 爬楼梯(动态规划)
注:题目:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?注意:给定 n 是一个正整数。示例 1:输入: 2输出: 2示例 2:输入: 3输出: 3题解:方法一 动态规划思路和算法我们用 f(x) 表示爬到第 x 级台阶的方案数,考虑最后一步可能跨了一级台阶,也可能跨了两级台阶,所以我们可以列出如下式子:f(x)=f(x−1)+f(x−2)它意味着爬到第 x 级台阶的方案数是爬到第x−1 级台阶的方案数和爬到原创 2021-07-10 16:37:24 · 181 阅读 · 0 评论 -
2021-7-7 62. 不同路径(动态规划)
注:题目:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3示例 3:输入:m = 7, n = 3输出:28示例 4:输入:m = 3, n = 3输出:6提示:1 <= m, n <= 100原创 2021-07-10 16:23:21 · 108 阅读 · 0 评论 -
2021-7-6 61. 旋转链表(双指针)
注:题目:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。示例 1:输入:head = [1,2,3,4,5], k = 2输出:[4,5,1,2,3]示例 2:输入:head = [0,1,2], k = 4输出:[2,0,1]提示:链表中节点的数目在范围 [0, 500] 内-100 <= Node.val <= 1000 <= k <= 2 * 109题解:思路及算法记给定链表的长度为 count,注意到当向右移动原创 2021-07-10 16:04:23 · 114 阅读 · 0 评论 -
2021-7-5 59. 螺旋矩阵 II(按层模拟)
注:要防止最后只有一行或者只有一列时的重复遍历。题目:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。示例 1:输入:n = 3输出:[[1,2,3],[8,9,4],[7,6,5]]示例 2:输入:n = 1输出:[[1]]提示:1 <= n <= 20题解:可以将矩阵看成若干层,首先填入矩阵最外层的元素,其次填入矩阵次外层的元素,直到填入矩阵最内层的元素。对于每层,从左上方开始以顺原创 2021-07-08 16:34:14 · 146 阅读 · 1 评论 -
2021-7-5 54. 螺旋矩阵(按层模拟)
注:要防止最后只有一行或者只有一列时的重复遍历。题目:给你一个 m 行 n 列的矩阵 matrix ,请按照顺时针螺旋顺序 ,返回矩阵中的所有元素。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]提示:m = matrix.lengthn =原创 2021-07-08 15:30:16 · 157 阅读 · 0 评论 -
2021-7-4 53. 最大子序和(动态规划)
注:题目:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [0]输出:0示例 4:输入:nums = [-1]输出:-1示例 5:输入:nums = [-100000]输出:-100000提示:1 &原创 2021-07-08 14:37:40 · 174 阅读 · 0 评论 -
2021-7-3 46. 全排列(回溯)
注:题目:给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例 1:输入:nums = [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:输入:nums = [0,1]输出:[[0,1],[1,0]]示例 3:输入:nums = [1]输出:[[1]]提示:1 <= nums.length <= 6-10 <= nums[i] <原创 2021-07-08 14:13:47 · 309 阅读 · 0 评论 -
2021-7-2 43. 字符串相乘(竖式模拟及其优化)
注:①注意字符串相加时,while循环的判断条件。②涉及到进位问题时,应该从字符串最后一位往前处理,不然会有遗漏进位的情况。while(index1>=0||index2>=0||flag!=0){·········}题目:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = “2”, num2 = “3”输出: “6”示例 2:输入: num1 = “123”原创 2021-07-07 21:30:13 · 263 阅读 · 1 评论 -
2021-7-1 33. 搜索旋转排序数组(二分查找)
注:题目:整数数组 nums 按升序排列,数组中的值 互不相同 。在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。给你 旋转后 的数组 nums 和原创 2021-07-01 15:47:06 · 214 阅读 · 0 评论 -
2021-7-1 26. 删除有序数组中的重复项(快慢指针)
注:题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:输入:nums = [1,1,2]输出:2, nums = [1,2]解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。示例 2:输入:nums = [0,0,1,1,1,2,2,3,3,原创 2021-07-01 10:33:46 · 129 阅读 · 0 评论 -
2021-6-30 23. 合并K个升序链表(顺序合并,优先队列)
注:题目:给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[1->4->5,1->3->4,2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输出原创 2021-06-30 16:48:39 · 181 阅读 · 0 评论 -
2021-6-31 21. 合并两个有序链表(递归、迭代)
注:题目:题解:方法一:递归思路我们可以如下递归地定义两个链表里的 merge 操作(忽略边界情况,比如空链表等):也就是说,两个链表头部值较小的一个节点与剩下元素的 merge 操作结果合并。算法我们直接将以上递归过程建模,同时需要考虑边界情况。如果 l1 或者 l2 一开始就是空链表 ,那么没有任何操作需要合并,所以我们只需要返回非空链表。否则,我们要判断 l1 和 l2 哪一个链表的头节点的值更小,然后递归地决定下一个添加到结果里的节点。如果两个链表有一个为空,递归结束。复杂度原创 2021-06-30 15:37:56 · 252 阅读 · 0 评论