LeetCode刷题总结文档
创始人
2024-04-25 01:57:36
0

前言

本文的刷题顺序依照代码随想录进行,因此题目板块的划分也和代码随想录一致。每个版块我会按照以下内容进行组织:

  • 该类型题目的特征
  • 时间复杂度
  • 值得一讲的相关题目知识

    文章目录

      • 前言
      • 正文
        • 数组
          • 二分查找
          • 移除元素 & 有序数组的平方 & 长度最小的子数组
          • 螺旋矩阵
          • 总结

正文

数组

二分查找

  • 特征:有序数组中找特定组合快速查询方法
  • 时间复杂度:O(logn)O(logn)O(logn)
  • 值得一讲的相关题目知识:
    • 对于求平方根的题目:#69 x的平方根和#367 有效的完全平方数
      • 如果是截取式返回,便可以将其转化成一个查找问题,采用二分法快速定位到应截取的整数平方根;也可以采用牛顿迭代法,xn+1=xn−f(xn)/f′(xn)x_{n+1}=x_n-f(x_n)/f'(x_n)xn+1​=xn​−f(xn​)/f′(xn​),但需要注意的是,面对截取式返回而采用牛顿迭代法,必须保证f(x)的单调性,同时初始取值必须大于截取的整数平方根,否则可能出现1.99999被截取为1的情形(正确值应该是2)

移除元素 & 有序数组的平方 & 长度最小的子数组

  • 特征
    • 要求只遍历一遍数组就解决问题,不要重复遍历
    • 要求原地操作,最好不使用新的空间来存储数组
  • 时间复杂度:O(n)O(n)O(n),空间复杂度:O(1)O(1)O(1)
  • 值得一讲的相关题目知识:
    • 该类题目在只遍历一遍数组的限制下,核心要义就是使用双指针,通过指针的不同作用,来完成原地操作更新值的需求。
      • 比如#26 删除有序数组中的重复项和#283 移动零使用的快慢指针,快指针用来遍历数组,慢指针则用来指向更新位置
      • 或者#977 有序数组的平方中双指针分别指向首和尾,从首尾两个方向依序从大到小插入至新数组
      • 又如#209 长度最小的子数组,采用滑动窗口思想,双指针分别代表窗口的起始和终止位置,窗口内的累加和始终保持小于目标值的状态,每遇到一次大于等于情况发生,记录一次最小长度
      • 还有#76 最小覆盖子串,也是采用滑动窗口思想,窗口内始终保持小于覆盖目标字符串状态

螺旋矩阵

  • 特征
    • 要求按照→↓←↑的顺序遍历二维数组(因为该顺序像螺旋一样,故得名)
  • 时间复杂度:O(n2)O(n^2)O(n2),空间复杂度:O(1)O(1)O(1)
  • 我的解题思路:在这里,我对边界的设置与代码随想录的想法不同,左右视为列遍历,由column控制for循环上限;上下视为行遍历,由row控制for循环上限。每执行完一次列/行遍历,row/column减一上限。直至row或column其中一个为0。该方案的好处是完全不需要关心矩阵最后一行/列如何特殊处理,都是由一个统一原则控制,代码如下

总结

数组部分的困难题目主要体现在字符串的各种操作上,如#76 最小覆盖子串这种。这种类型虽然难,但我总结出了两条通用的技巧:

  • 大多采用滑动窗口法,通过滑动窗口来保证一次遍历完成任务
  • 记住ASCII码上限为128,可通过int[128]int[128]int[128]来表示所有ASCII的映射,比利用MapMapMap进行相关操作更加简洁

另外,数组结构在JavaJavaJava中作为以下类的底层实现:

  • ArrayListArrayListArrayList:所以该类的删除操作时间复杂度为O(n)O(n)O(n),这是在编程中经常被忽视的一点

在这里插入图片描述

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...