一文总结Leedcode数组常考题目

文章目录

  • 前言
  • 一、数组性质
  • 二、数组题目的基本形式
    • 1.二分法的两种写法
    • 2.双指针
    • 3.滑动窗口
    • 4.模拟行为
  • 总结


前言


Hi,小伙伴们大家好,我是哈尔滨工业大学机器人重点实验室的小李,主要研究方向是视觉算法。相信刷过Leedcode的小伙伴们都知道,数组知识简单易学,但是题目难度却可以横跨简单到困难,简单的题目可以让你怀疑这就完了?是不是还有什么陷阱;困难的题目难到你抓秃头发、绞尽脑汁也想不出来!没错这就是数组,知识简单,却是形成各种困难问题的根基。

那么让我们通过一文来总结一下数组的基本考察形式吧,其他再难的题目也不过是这些基本形式的组合与变体,相信熟练掌握这些基本形式之后,小伙伴们再刷其他任何数组的题目可以游刃有余~

一、数组性质

1.数组下标都是从0开始的。
2.数组内存空间的地址是连续的
注意:在删除或者增添元素的时候,就难免要移动其他元素的地址。

二、数组题目的基本形式

1.二分法的两种写法

循环不变量规则,看住区间。
代码如下:

left,right =
while left <=right:  #[left,right)
    mid= (left+right)//2
    if xxx:
        right=mid-1
    elif XXX:
        left=mid+1
left,right=
while left<right:  #[left,right)
    mid=(left+right)//2
    if xxx:
        right=mid
    elif xxx:
        left=mid+1

2.双指针

通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
在原数组上进行移动,修改。
代码如下:

class Solution (object)def removeEIement (self, nums, val):
        slow, fast=00
        while fast<len(nums):
            if nums[fast] !=val: 
              nums[slow]=nums[fast]
              slow+=l 
            fast+=l 
     return slow 

3.滑动窗口

滑动窗口的精妙之处在于根据当前子序列和大小的情况,不断调节子序列的起始位置。外层i是窗口右侧,内层j是窗口左侧。
代码如下:

class Solutiondef minSubArrayLen (self, target:int, nums:List[int])->int:
       re=float('inf')
       sum=0
       j=0
       for i in range(len(nums)):
           sum+=nums[i]
           while sum>target:
               re=min(re,i-j+1)
               sum-=nums[j]
               j+=1
     return 0 if j==0 else re

4.模拟行为

循环不变量原则
例题:59.螺旋矩阵II
模拟顺时针画矩阵的过程:
填充上行从左到右
填充右列从上到下
填充下行从右到左
填充左列从下到上
一文总结Leedcode数组常考题目_第1张图片
代码如下:

一文总结Leedcode数组常考题目_第2张图片


总结

以上就是Leedcode中数组的主要考察的基本形式,万变不离其中,有任何讲解不正确的地方或者不清楚的问题欢迎留言,小编会一一回复,最后祝愿小伙伴们可以早日拿到心仪offer~

你可能感兴趣的:(数据结构与算法,算法,python,leetcode,数据结构)