leetcode中数组问题常用的处理方式

对于数组的处理,是leetcode中一种非常常见的题型。针对数组结构的处理,我自己整理了一些常用的解题思路,便于在面对问题时,迅速思索解题方法。

1.滑窗法
2.双指针
3.构建左右侧双列表
4.利用数据结构

1.滑窗法
滑窗法一般用于处理数组中多个数字之间关系。 一般的结构是,一个for循环嵌套一个while循环,并结合max或者min方法进行判断。 相关的题目见上述链接。
2.双指针

双指针方法一般有两种应用场景:

  • 一种是左右指针,即开始时定义左右指针索引。
    左右指针中又包含两种方式:
    一种是先定义边界后,左加右减。
    这种方式广泛应用于二分排序等操作常见用法:二分法常见应用
l,r = 0,len(list)-1

另一种左右指针是以出现的每各index为中轴,左减右加。这种方式运用比较少,可以用于判定字符串中的回文字符串,见密码截取

  • 另一种是快慢指针,执行逻辑后,两指针一先一后遍历数组,判断是否满足条件。
    常见用法:快慢指针法题目汇总
3.构建左右侧双列表

构建左右列表问题,一般需要考虑数组中三个值的关系,例如比较是否递增,中间值是否最小等等。
因此,我们一般会构建两个和原数组等长的数组,按照数组中的每个元素,分别统计其左侧情况与右侧情况,维护其左侧结果和右侧结果。
典型的题目有:
334. 递增的三元子序列
给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。
思路:
对于一个长度为3的递增序列,我们只需要考虑数组中的每一个数字左侧是否有数字比其小,右侧是否有数字比其大即可。
这样,我们需要维护两个数组,分别记录原数组中每个数字左侧最小值和右侧最大值。随后,分别对比相同索引位置,是否有:左侧<当前<右侧
相应代码如下:

class Solution:
    def increasingTriplet(self, nums: List[int]) -> bool:
        if len(nums) < 3:
            return False
        small = [nums[0]]*len(nums)
        large = [nums[-1]]*len(nums
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值