leetcode之数组篇
文章平均质量分 86
向着五星的方向
阿里云专家博主,华为云云享专家,专注于Java全栈,大数据方向,欢迎大家三连,有事可以私聊!
展开
-
刷题之Leetcode54题(超级详细)
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]相同的地方是:从右向左遍历行和从下向上遍历列的终止条件都是大于遍历起点start。输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]中间行或中间列的位置mid = 行和列中的最小值除以二的值。输出:[1,2,3,6,9,8,7,4,5]原创 2024-04-08 15:47:35 · 688 阅读 · 0 评论 -
刷题之Leetcode59题(超级详细)
这里一圈下来,我们要画每四条边,这四条边怎么画,每画一条边都要坚持一致的左闭右开,或者左开右闭的原则,这样这一圈才能按照统一的规则画下来。代码如下,已经详细注释了每一步的目的,可以看出while循环里判断的情况是很多的,代码里处理的原则也是统一的左闭右开。可以发现这里的边界条件非常多,在一个循环中,如此多的边界条件,如果不按照固定规则来遍历,那就是。就是因为在画每一条边的时候,一会左开右闭,一会左闭右闭,一会又来左闭右开,岂能不乱。这道题目可以说在面试中出现频率较高的题目,由外向内一圈一圈这么画下去。原创 2024-04-08 09:50:26 · 1155 阅读 · 0 评论 -
刷题之Leetcode844题(超级详细)
844. 比较含退格的字符串https://leetcode.cn/problems/backspace-string-compare/给定 和 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 。 代表退格字符。注意:如果对空文本输入退格字符,文本继续为空。示例 1:输入:s = "ab#c", t = "ad#c"输出:true解释:s 和 t 都会变成 "ac"。示例 2:输入:s = "ab原创 2024-04-06 22:08:21 · 748 阅读 · 0 评论 -
刷题之Leetcode283题(超级详细)
这道题目,使用暴力的解法,可以两层for循环,模拟数组删除元素(也就是向前覆盖)的过程。双指针法在数组移除元素中,可以达到O(n)的时间复杂度,里已经详细讲解了,那么本题和移除元素其实是一个套路。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。做这道题目之前,大家可以做一做。,编写一个函数将所有。原创 2024-04-06 22:02:47 · 475 阅读 · 0 评论 -
刷题之Leetcode209题(超级详细)
不要以为for里放一个while就以为是O(n^2)啊, 主要是看每一个元素被操作的次数,每个元素在滑动窗后进来操作一次,出去操作一次,每个元素都是被操作两次,所以时间复杂度是 2 × n 也就是O(n)。在暴力解法中,是一个for循环滑动窗口的起始位置,一个for循环为滑动窗口的终止位置,用两个for循环 完成了一个不断搜索区间的过程。窗口的结束位置如何移动:窗口的结束位置就是遍历数组的指针,也就是for循环里的索引。所以 只用一个for循环,那么这个循环的索引,一定是表示 滑动窗口的终止位置。原创 2024-04-06 21:55:58 · 1174 阅读 · 0 评论 -
刷题之Leetcode977题(超级详细)
做题的时候自己能分析出来时间复杂度就可以了,至于leetcode上执行用时,大概看一下就行,只要达到最优的时间复杂度就可以了,给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。此时的时间复杂度为O(n),相对于暴力排序的解法O(n + nlog n)还是提升不少的。定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。原创 2024-04-05 22:59:27 · 311 阅读 · 0 评论 -
刷题之Leetcode27题(超级详细)
示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。很多兄弟这道题目做的很懵,就是不理解 快慢指针究竟都是什么含义,所以一定要明确含义,后面的思路就更容易理解了。元素的顺序可以改变。有的同学可能说了,多余的元素,删掉不就得了。原创 2024-04-05 21:23:38 · 819 阅读 · 0 评论 -
刷题之Leetcode34题(超级详细)
力扣链接(opens new window)给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]原创 2024-04-04 22:47:17 · 890 阅读 · 0 评论 -
刷题之Leetcode35题(超级详细)
希望通过这道题目,大家会发现平时写二分法,为什么总写不好,就是因为对区间定义不清楚。确定要查找的区间到底是左闭右开[left, right),还是左闭又闭[left, right],这就是不变量。然后在二分查找的循环中,坚持循环不变量的原则,很多细节问题,自然会知道如何处理了。t=N7T8力扣题目链接(opens new window)https://leetcode.cn/problems/search-insert-position/原创 2024-04-04 21:36:07 · 1364 阅读 · 0 评论 -
刷题之Leetcode704题(超级详细)
二分法是非常重要的基础算法,为什么很多同学对于二分法都是一看就会,一写就废?其实主要就是对区间的定义没有理解清楚,在循环中没有始终坚持根据查找区间的定义来做边界处理。区间的定义就是不变量,那么在循环中坚持根据查找区间的定义来做边界处理,就是循环不变量规则。本篇根据两种常见的区间定义,给出了两种二分法的写法,每一个边界为什么这么处理,都根据区间的定义做了详细介绍。相信看完本篇应该对二分法有更深刻的理解了。原创 2024-04-04 21:18:18 · 1069 阅读 · 0 评论