![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode
文章平均质量分 91
Liaac
这个作者很懒,什么都没留下…
展开
-
【LeetCode】day11:150 - 逆波兰表达式求值, 239 - 滑动窗口最大值, 34 - 前K个高频元素
当遍历到索引k-1时,其之后的每一次前进都需要对应一个窗口最大值的结果记录到res中,而这个窗口的最大值为队列头元素索引对应的值(nums[dq.front()])。思路为构建一个单调队列用于记录窗口滑动过程中当前窗口的值按大小的依次排列,队列头部表示当前最大值的索引,随着窗口滑动而更新,其后续所有值都依次减小且索引依次增大。输入:tokens = [“10”,“6”,“9”,“3”,”+“,”-11",“输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。原创 2024-07-14 00:34:01 · 869 阅读 · 0 评论 -
【LeetCode】day10:232 - 用栈实现队列, 225 - 用队列实现栈, 20 - 有效的括号, 1047 - 删除字符串中所有的相邻重复项
遍历字符串并使用栈记录字符,若当前字符与栈顶字符(上一个字符)相同则将栈顶弹出表示两两相消,否则将当前字符压入栈中。括号为左括号和右括号,对字符串遍历时将遇到的左括号压入栈中,每当遇到右括号时将栈顶元素(距离当前右括号最近的左括号),若能匹配则继续否则返回false。请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。原创 2024-07-13 19:50:43 · 631 阅读 · 0 评论 -
【LeetCode】day9:151 - 翻转字符串里的单词, 右旋字符串
继续前进直到遍历完成或是当前单词为空格:当在单词中遇见首个空格时(s[i] == ’ ’ && inWord),将inWord置为false表示当前单词截止,将该单词逆序并加入结果res中;字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。首先将字符串完全翻转180度,此时各单词出现的顺序以及单词本身都会逆序,接下来的目的是遍历字符串并对每个单词的拼写顺序进行恢复。原创 2024-07-11 23:59:18 · 741 阅读 · 0 评论 -
【LeetCode】day8:344 - 反转字符串, 541 - 反转字符串II, 替换数字
以2k为步长遍历字符串,对于不是尾部的情况按前k个反转的逻辑正常处理,在当前的位置若剩余字符小于k个则反转全部并返回,其他情况则照常处理。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“h”,“a”,“n”,“n”,“a”,“H”]输出:[“o”,“l”,“l”,“e”,“h”]输出:“bacdfeg”原创 2024-07-11 00:07:18 · 289 阅读 · 0 评论 -
【LeetCode】day7:454 - 四数相加, 383 - 赎金信, 15 - 三数之和, 18 - 四数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输入:nums1 = [0], nums2 = [0], nums3 = [0], nums4 = [0]输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。原创 2024-07-09 23:58:36 · 783 阅读 · 0 评论 -
【LeetCode】day6:242 - 有效的字母异位词,349 - 两个数组的交集, 202 - 快乐数, 1 - 两数之和
使用HashSet对其中一个数组进行遍历并记录元素出现的情况,再对另一个数组遍历,若HashSet中存在当前元素则为交集元素,将其存入res中。思路是对数组元素进行遍历,并在过程中使用HashMap对当前数组索引以及元素进行记录,key表示元素的值,value表示索引。给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]原创 2024-07-09 02:34:25 · 806 阅读 · 0 评论 -
【LeetCode】day4:24 - 两两交换链表中的节点, 19 - 删除链表的倒数第N个节点, 160 - 相交链表, 142 - 环形链表
直观的思路是首先获取链表的节点个数len,删除链表的倒数第N个节点即删除从head处开始的第len-n个节点,定义两个指针pre和cur分别从dummy和head移动,cur在遍历步长结束时指向需要被删除的节点,而这里的pre用来记录cur的前节点用于删除。要实现当前节点A和下一个节点B的两两交换需完成:记录A节点的前节点pre,记录B节点的后节点tmp=B->next,交换节点指向即B指向A,然后pre指向B以及A指向tmp,如下图。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。原创 2024-07-07 21:24:59 · 681 阅读 · 0 评论 -
【LeetCode】day3:203 - 移除链表元素,707 - 设计链表, 206 - 反转链表
另一种思路是递归的实现,将任务分解为:使当前节点指向前一个节点,接着返回以当前节点为头节点翻转转后的新链表头节点。将后续链表看作一个整体,定义函数为返回翻转后的链表的头节点,并使head指向pre,在当前的递归轮次可以视为这个后续链表已调用该函数完成翻转,且翻转后的尾节点已指向cur,使当前cur指向pre即可,如图。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。输入:head = [1,2,3,4,5]原创 2024-07-05 23:58:34 · 796 阅读 · 0 评论 -
【LeetCode】day2:977 - 有序数的平方, 209 - 长度最小的子数组, 59 - 螺旋矩阵
按照需要画出的正方形的圈数(n/2)进行循环,进入循环时当前的圈数(cur)对应的元素nums[cur][cur]就是当前正方形的左上角。注意到题目有个前提是数组中元素均为正整数,上述代码也是基于这一前提的,这一点保证了当right前进时总和一定是增大的,对于当前区间当区间长度减小时总和一定是减小的。输入:target = 11, nums = [1,1,1,1,1,1,1,1]输入:target = 7, nums = [2,3,1,2,4,3]输出:[[1,2,3],[8,9,4],[7,6,5]]原创 2024-07-05 02:38:46 · 858 阅读 · 0 评论 -
【LeetCode】day1:704 - 二分查找, 27 - 移除元素
目的是对数组所有元素进行遍历查找,那么直观的思路就是left指向数组最左边的元素(0),right指向数组最右边的元素(nums.size()-1),以二分的方式逐渐收缩逼近,直到两者相遇或交错代表查找结束(left<=right)。元素的顺序可能发生改变。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入: nums = [-1,0,3,5,9,12], target = 2。输入:nums = [0,1,2,2,3,0,4,2], val = 2。原创 2024-07-04 02:32:50 · 776 阅读 · 1 评论