leetcode
文章平均质量分 82
qxl_0517
这个作者很懒,什么都没留下…
展开
-
Leetcode专题之二维前缀和
引入前缀和是一种重要的预处理,能大大降低查询的时间复杂度。我们可以简单理解为“数列的前 n 项的和”。这个概念其实很容易理解,即一个数组中,第 n 位存储的是数组前 n 个数字的和。通过一个例子来进行说明会更清晰。题目描述:有一个长度为 N 的整数数组 A,要求返回一个新的数组 B,其中 B 的第 i 个数 B[i]是原数组 A 前 i 项和。这道题实际就是让你求数组 A 的前缀和。对 [1,2,3,4,5,6] 来说,其前缀和可以是 pre=[1,3,6,10,15,21]。我们可以使用公式 pre原创 2021-09-16 16:33:56 · 912 阅读 · 0 评论 -
Leetcode专题之一维前缀和
一维前缀和基本概念和简单实用滑动窗口和前缀和在连续问题中,对于优化时间复杂度有着很重要的意义。 因此如果一道题你可以用暴力解决出来,而且题目恰好有连续的限制, 那么滑动窗口和前缀和等技巧就应该被想到。有 N 个的正整数放到数组 A 里,现在要求一个新的数组 B,新数组的第 i 个数 B[i]是原数组 A 第 0 到第 i 个数的和。这道题可以使用前缀和来解决。 前缀和是一种重要的预处理,能大大降低查询的时间复杂度。我们可以简单理解前缀和为“数列的前 n 项的和”。这个概念其实很容易理解,即一个数组原创 2021-09-12 22:22:10 · 248 阅读 · 0 评论 -
Leetcode练习之队列
和栈相反,队列是只允许在⼀端进⾏插⼊,在另⼀端进⾏删除的线性表。因此队列(Queue)是⼀种先进先出(FIFO - First In First Out)的数据结构,通常情况下,我们称队列中插⼊元素的⼀端为尾部,删除元素的⼀端为头部。队列也是⼀种逻辑结构,底层同样可以⽤数组实现,也可以⽤链表实现,不同实现有不同的取舍。如果⽤数组实现,那么⼊队或者出队的时间复杂度⼀定有且仅有⼀个是O(N)O(N)O(N)的,其中 NNN 为队列的⻓度。⽽使⽤链表实现则可以在 O(1)O(1)O(1)的时间完成任何合法的队列原创 2021-09-11 16:10:33 · 239 阅读 · 0 评论 -
LeetCode练习之栈
栈是⼀种受限的数据结构, 体现在只允许新的内容从⼀个⽅向插⼊或删除,这个⽅向我们叫栈顶,另⼀端⼀般称为栈底。除了栈顶的其他位置获取或操作内容都是不被允许的。栈最显著的特征就是 LIFO(Last In, First Out - 后进先出)栈的常⽤操作与时间复杂度进栈push - 将元素放置到栈顶出栈pop - 将栈顶元素弹出取栈顶top - 得到栈顶元素的值判断是否为空栈isEmpty - 判断栈内是否有元素复杂度分析:进栈 - O(1)出栈 - O(1)取栈顶 - O(1)判断是否为空栈原创 2021-09-09 14:42:38 · 86 阅读 · 0 评论 -
LeetCode练习之数组
414 第三大的数Given an integer array nums, return the third distinct maximum number in this array. If the third maximum does not exist, return the maximum number.class Solution(object): def thirdMax(self, nums): """ :type nums: List[int]原创 2021-09-08 18:30:30 · 146 阅读 · 0 评论 -
滑动窗口专题
介绍滑动窗口是一种解决问题的思路和方法,通常用来解决一些连续问题。 比如 LeetCode 的 209. 长度最小的子数组。更多滑动窗口题目见下方题目列表。常见套路滑动窗口主要用来处理连续问题。比如题目求解“连续子串 xxxx”,“连续子数组 xxxx”,就应该可以想到滑动窗口。能不能解决另说,但是这种敏感性还是要有的。从类型上说主要有:固定窗口大小窗口大小不固定,求解最大的满足条件的窗口窗口大小不固定,求解最小的满足条件的窗口(上面的 209 题就属于这种)后面两种我们统称为可变窗口。原创 2021-08-30 00:35:48 · 193 阅读 · 0 评论 -
二分查找算法
二分查找又称折半搜索算法。 狭义地来讲,二分查找是一种在有序数组查找某一特定元素的搜索算法。bisect模块学习基本概念解空间解空间指的是题目所有可能的解构成的集合。比如一个题目所有解的可能是 1,2,3,4,5,但具体在某一种情况只能是其中某一个数(即可能是 1,2,3,4,5 中的一个数)。那么这里的解空间就是 1,2,3,4,5 构成的集合,在某一个具体的情况下可能是其中任意一个值,我们的目标就是在某个具体的情况判断其具体是哪个。如果线性枚举所有的可能,就枚举这部分来说时间复杂度就是 O(n)原创 2021-08-26 23:49:34 · 1664 阅读 · 0 评论 -
模拟,枚举与递推
模拟模拟指的是将题目描述转化为可执行的代码,其中我们会用到编程语言的基础内容,最常见的就是循环。简单的题目,通常直接模拟就够了,比如 874. 模拟行走机器人 。而如果是中等和困难的题目,除了使用模拟,我们还需要使用一些别的技巧。比如有的题目就是模拟 + 堆,这是因为模拟的过程我们需要动态获取极值。再比如 799. 香槟塔,其实就是模拟 + 动态规划。可以看出,中等的题目通常模拟只是辅助,还需要结合其他知识。那么是否所有的题目都是模拟?当然不是。比如动态规划的题目,这就不能说是模拟。因为题目并没有告原创 2021-08-23 23:10:55 · 430 阅读 · 0 评论 -
数据结构中的图
基本概念无向图 & 有向图〔Undirected Graph & Deriected Graph〕有权图 & 无权图〔Weighted Graph & Unweighted Graph〕入度 & 出度〔Indegree & Outdegree〕路径 & 环〔路径:Path〕有环图〔Cyclic Graph〕无环图〔Acyclic Graph〕连通图 & 强连通图在无向图中,若任意两个顶点 i 与 j 都有路径相通,则称该无向图为原创 2021-08-19 00:05:39 · 276 阅读 · 0 评论 -
双指针问题
常见题型有哪些?这里我将其分为三种类类型,分别是:快慢指针(两个指针步长不同,一个步长大,一个步长小。典型的是一个步长为 1,另外一个步长为 2)左右端点指针(两个指针分别指向头尾,并往中间移动,步长关系不确定)固定间距指针(两个指针间距相同,步长相同)快慢指针判断链表是否有环1)例题:力扣 287 题,一个是 142 题。2)读写指针。典型的是删除重复元素例题:80.删除排序数组中的重复项 II3)一次遍历(One Pass)求链表的中点具体算法是使用两个指针。快原创 2021-08-06 11:35:11 · 83 阅读 · 0 评论 -
链表LeetCode2
复杂的链表的深度拷贝LeetCode138深度拷贝后的链表和原链表完全独立map的应用#include <studio.h>#include < map>struct RandomListNode{int label;RandomListNode * next,* random;RandomListNode(int x):label(x),next(NULL...原创 2019-05-27 21:12:43 · 74 阅读 · 0 评论 -
二叉树和图
Leetcode113深度搜索-路径之和/**Definition for a binary tree node.struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}};/class Sol...原创 2019-06-11 22:25:35 · 590 阅读 · 0 评论 -
leetcode-数组去重
题目:Given an integer array nums sorted in non-decreasing order, remove the duplicates in-place such that each unique element appears only once. The relative order of the elements should be kept the same.解法:单指针法,遍历数组,遇到和下一个元素不同的把这个元素按顺序保存到数组的前面,用指针记录保存的个数,注原创 2021-08-05 14:38:30 · 177 阅读 · 0 评论