数据结构与算法合集
文章平均质量分 94
欢迎来到数据结构与算法专栏!本专栏旨在为读者提供关于数据结构与算法的深入理解和实践应用。在这里,我们将详细探讨各种数据结构的特性和使用场景,以及各种算法的原理和优化方法。
绿皮龟
曾获得阿里云专家博主,阿里云乘风问答官,华为云云享专家,CSDN全栈领域新星创作者,支付宝开发者社区优秀创作博主,国家金融比赛二等奖获奖者,省物流比赛二等奖获得者,省电商赛二等奖获得者。
展开
-
【数据结构和算法】种花问题
这是力扣的 605 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。假设有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给你一个整数数组flowerbed表示花坛,由若干0和1组成,其中0表示没种植花,1表示种植了花。另有一个数n,能否在不打破种植规则的情况下种入n朵花?能则返回true,不能则返回false。原创 2024-01-18 10:49:53 · 2983 阅读 · 37 评论 -
【数据结构和算法】反转链表
这是力扣的 206 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。继续开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。给你单链表的头节点head,请你反转链表,并返回反转后的链表。原创 2024-01-17 10:02:17 · 1605 阅读 · 33 评论 -
【数据结构和算法】奇偶链表
这是力扣的 328 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是奇数,第二个节点的索引为偶数,以此类推。请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。你必须在O(1)的额外空间复杂度和O(n)的时间复杂度下解决这个问题。原创 2024-01-16 10:17:34 · 1572 阅读 · 19 评论 -
【数据结构和算法】删除链表的中间节点
这是力扣的1657题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始链表的模块了,这道题是一道非常好的队列的例题,很有代表性。给你一个链表的头节点head。删除链表的中间节点,并返回修改后的链表的头节点head。长度为n链表的中间节点是从头数起第⌊n / 2⌋个节点(下标从0开始),其中⌊x⌋表示小于或等于x的最大整数。对于n=1、2、3、4和5的情况,中间节点的下标分别是0、1、1、2和2。原创 2024-01-15 10:25:31 · 1813 阅读 · 36 评论 -
【数据结构和算法】最近的请求次数
这是力扣的 933 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始队列的模块了,这道题是一道非常好的队列的例题,很有代表性。写一个RecentCounter类来计算特定时间范围内最近的请求。请你实现RecentCounter类:RecentCounter()初始化计数器,请求数为 0 。int ping(int t)在时间t添加一个新请求,其中t表示以毫秒为单位的某个时间,并返回过去3000毫秒内发生的所有请求数(包括新请求)原创 2024-01-12 11:13:46 · 1830 阅读 · 17 评论 -
【数据结构和算法】字符串解码
这是力扣的 394 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给定一个经过编码的字符串,返回它解码后的字符串。编码规则为:k[encoded_string],表示其中方括号内部的encoded_string正好重复k次。注意k保证为正整数。你可以认为输入字符串总是有效的;输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。原创 2024-01-05 11:15:04 · 1464 阅读 · 17 评论 -
【数据结构和算法】小行星碰撞
这是力扣的 735 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给定一个整数数组asteroids,表示在同一行的小行星。对于数组中的每一个元素,其绝对值表示小行星的大小,正负表示小行星的移动方向(正表示向右移动,负表示向左移动)。每一颗小行星以相同的速度移动。找出碰撞后剩下的所有小行星。碰撞规则:两个小行星相互碰撞,较小的小行星会爆炸。如果两颗小行星大小相同,则两颗小行星都会爆炸。两颗移动方向相同的小行星,永远不会发原创 2024-01-04 11:21:59 · 1396 阅读 · 20 评论 -
【数据结构和算法】从字符串中移除星号
这是力扣的 2390 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。慢慢开始栈的模块了,这道题是一道非常好的栈的例题,很有代表性。给你一个包含若干星号*的字符串s。在一步操作中,你可以:选中s中的一个星号。移除星号左侧最近的那个非星号字符,并移除该星号自身。返回移除所有星号之后的字符串。原创 2024-01-03 14:38:55 · 1258 阅读 · 28 评论 -
【数据结构和算法】 相等行列对
这是力扣的 2352 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。给你一个下标从0开始、大小为n x n的整数矩阵grid,返回满足Ri行和Cj列相等的行列对(Ri, Cj)的数目。如果行和列以相同的顺序包含相同的元素(即相等的数组),则认为二者是相等的。原创 2024-01-02 11:02:41 · 1095 阅读 · 6 评论 -
【数据结构和算法】独一无二的出现次数
这是力扣的 1207 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你一个整数数组arr,请你帮忙统计数组中每个数的出现次数。如果每个数的出现次数都是独一无二的,就返回true;否则返回false。原创 2023-12-29 10:35:39 · 1289 阅读 · 25 评论 -
【数据结构和算法】找出两数组的不同
这是力扣的 2215 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。给你两个下标从0开始的整数数组nums1和nums2,请你返回一个长度为2的列表answer,其中:answer[0]是nums1中所有不存在于nums2中的不同整数组成的列表。answer[1]是nums2中所有不存在于nums1中的不同整数组成的列表。注意:列表中的整数可以按任意顺序返回。原创 2023-12-28 11:32:14 · 1502 阅读 · 22 评论 -
【数据结构和算法】寻找数组的中心下标
给你一个整数数组nums,请计算数组的中心下标。数组中心下标是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。如果中心下标位于数组最左端,那么左侧数之和视为0,因为在下标的左侧不存在元素。这一点对于中心下标位于数组最右端同样适用。如果数组有多个中心下标,应该返回最靠近左边的那一个。如果数组不存在中心下标,返回-1。原创 2023-12-27 11:01:33 · 1363 阅读 · 32 评论 -
【数据结构和算法】找到最高海拔
这是力扣的 1732 题,难度为简单,解题方案有很多种,本文讲解我认为最奇妙的一种。这是一道非常经典的前缀和问题,虽然看似简单,但它却能让你深入理解前缀和的特点。有一个自行车手打算进行一场公路骑行,这条路线总共由n + 1个不同海拔的点组成。自行车手从海拔为0的点0开始骑行。给你一个长度为n的整数数组gain,其中gain[i]是点i和点i + 1的净海拔高度差(0原创 2023-12-26 10:18:31 · 1577 阅读 · 42 评论 -
【数据结构和算法】删掉一个元素以后全为 1 的最长子数组
这是力扣的 1493 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又又又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给你一个二进制数组nums,你需要从中删掉一个元素。请你在删掉元素的结果数组中,返回最长的且只包含 1 的非空子数组的长度。如果不存在这样的子数组,请返回 0 。原创 2023-12-25 11:03:50 · 1295 阅读 · 23 评论 -
【数据结构和算法】最大连续1的个数 III
这是力扣的 1004 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。这道题很活灵活现,需要加深对题意的变相理解。给定一个二进制数组nums和一个整数k,如果可以翻转最多k个0,则返回数组中连续1的最大个数。原创 2023-12-22 15:26:45 · 2651 阅读 · 43 评论 -
【数据结构和算法】定长子串中元音的最大数目
这是力扣的 1456 题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。又是一道滑动窗口的典型例题,可以帮助我们巩固滑动窗口算法。给你字符串s和整数k。请返回字符串s中长度为k的单个子字符串中可能包含的最大元音字母数。英文中的元音字母为(a,e,i,o,u)。原创 2023-12-21 10:45:34 · 2335 阅读 · 7 评论 -
【数据结构和算法】子数组最大平均数 I
原题链接:力扣 643 题 子数组最大平均数 I给你一个由n个元素组成的整数数组nums和一个整数k。请你找出平均数最大且长度为k的连续子数组,并输出该最大平均数。任何误差小于10-5的答案都将被视为正确答案。原创 2023-12-20 14:52:46 · 1279 阅读 · 17 评论 -
【数据结构和算法】 K 和数对的最大数目
给你一个整数数组nums和一个整数k。每一步操作中,你需要从数组中选出和为k的两个整数,并将它们移出数组。返回你可以对数组执行的最大操作数。原创 2023-12-19 10:36:43 · 1067 阅读 · 16 评论 -
【数据结构和算法】盛最多水的容器
给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i, 0)和(i, height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。原创 2023-12-18 10:18:26 · 1322 阅读 · 4 评论 -
【数据结构和算法】移动零
给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。请注意,必须在不复制数组的情况下原地对数组进行操作。进阶:你能尽量减少完成的操作次数吗?原创 2023-12-14 11:00:29 · 1026 阅读 · 4 评论 -
【数据结构和算法】压缩字符串
给你一个字符数组chars,请使用下述算法压缩:从一个空字符串s开始。对于chars中的每组连续重复字符:如果这一组长度为1,则将字符追加到s中。否则,需要向s追加字符,后跟这一组的长度。压缩后得到的字符串s不应该直接返回,需要转储到字符数组chars中。需要注意的是,如果组长度为10或10以上,则在chars数组中会被拆分为多个字符。请在修改完输入数组后,返回该数组的新长度。原创 2023-12-13 10:32:27 · 1261 阅读 · 2 评论 -
【数据结构和算法】递增的三元子序列
给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。如果存在这样的三元组下标(i, j, k)且满足i < j < k,使得nums[i] < nums[j] < nums[k],返回true;否则,返回false。原创 2023-12-12 10:56:11 · 1558 阅读 · 0 评论 -
【数据结构和算法】除自身以外数组的乘积
给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。题目数据保证数组nums之中任意元素的全部前缀元素和后缀的乘积都在32 位整数范围内。请不要使用除法,且在O(n)时间复杂度内完成此题。原创 2023-12-11 10:26:54 · 1159 阅读 · 0 评论 -
【数据结构和算法】反转字符串中的单词
给你一个字符串s,请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意:输入字符串s中可能会存在前导空格、尾随空格或者单词间的多个空格。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。原创 2023-12-10 09:00:00 · 925 阅读 · 0 评论 -
【数据结构和算法】拥有最多糖果的孩子
给你一个数组candies和一个整数extraCandies,其中candies[i]代表第i个孩子拥有的糖果数目。对每一个孩子,检查是否存在一种方案,将额外的extraCandies个糖果分配给孩子们之后,此孩子有最多的糖果。注意,允许有多个孩子同时拥有最多的糖果数目。原创 2023-12-08 10:03:35 · 925 阅读 · 0 评论 -
【数据结构和算法】字符串的最大公因子
对于字符串s和t,只有在s = t + ... + t(t自身连接 1 次或多次)时,我们才认定“t能除尽s”。给定两个字符串str1和str2。返回最长字符串x,要求满足x能除尽str1且x能除尽str2。原创 2023-12-07 15:09:09 · 1221 阅读 · 0 评论 -
【数据结构和算法】交替合并字符串
给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。原创 2023-12-06 10:23:34 · 1105 阅读 · 0 评论 -
【数据结构和算法】到达首都的最少油耗
本题用的贪心 + DFS解题。这道题其实是要找到 树结构中所有节点到根节点的最小开销和 。题目中的每个城市其实就是树结构中的一个节点,除了根节点外,每个节点都要从自身出发到达根节点,这其实就是根节点到每个节点的路径。【深度优先搜索先准备着】每个节点之间一辆车的转移的开销为 1,我们要让开销和最小,那么就要使每个节点之间的转移车尽量的少。原创 2023-12-05 11:28:34 · 1247 阅读 · 0 评论 -
【数据结构和算法】找出叠涂元素
给你一个下标从0开始的整数数组arr和一个m x n的整数矩阵mat。arr和mat都包含范围[1,m * n]内的所有整数。从下标0开始遍历arr中的每个下标i,并将包含整数arr[i]的mat单元格涂色。请你找出arr中在mat的某一行或某一列上都被涂色且下标最小的元素,并返回其下标i。原创 2023-12-01 10:50:07 · 1046 阅读 · 1 评论 -
【数据结构和算法】确定两个字符串是否接近
这是力扣的1657题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。复杂度分析:时间复杂度:O(max{n1,n2}+ClogC),其中 n1 和 n2 分别是字符串 word1 和 word2 的长度,C=26 是字符集大小。空间复杂度:O(C)。原创 2023-11-30 11:36:33 · 1227 阅读 · 0 评论 -
【数据结构和算法】无限集中的最小数字
这是力扣的2336题,难度为中等,解题方案有很多种,本文讲解我认为最奇妙的一种。使用TreeSet和min变量来维护一个无限集合,保证集合的连续性。添加元素时,若元素大于等于min,则不添加;若元素小于min,则将其添加到TreeSet中。删除元素时,先判断TreeSet是否为空,若不为空,则从TreeSet中删除元素;若为空,则将min值加1。该算法能够高效地添加和删除元素,并保持集合的连续性。该算法还可以用优先队列(小根堆)+ hash表解题,比较优秀。原创 2023-11-29 11:30:00 · 1573 阅读 · 0 评论