leetcode
文章平均质量分 71
zhurui_xiaozhuzaizai
想要浓密的秀发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
leetcode---距离计算
1131. 绝对值表达式的最大值给你两个长度相等的整数数组,返回下面表达式的最大值:|arr1[i] - arr1[j]| + |arr2[i] - arr2[j]| + |i - j|其中下标 i,j 满足 0 <= i, j < arr1.length。按照数学中将abs展开多种情况分析,数学解...原创 2022-11-25 15:04:52 · 777 阅读 · 0 评论 -
leetcode--序列化与反序列化
剑指 Offer 37. 序列化二叉树请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与 LeetCode 目前使用的方式一致,详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式,你也可以采用其他的方法解决这个问题。# Definition for a binary tre原创 2022-11-25 15:04:38 · 166 阅读 · 0 评论 -
计算类-计算面积
三角形面积计算鞋带公式(shoelace)Shoelace公式,也叫高斯面积公式,是一种数学算法,可求确定区域的一个简单多边形的面积。利用多边形(n边形)面积计算公式:S=|(x1 * y2 + x2 * y3 + x3 * y1 - y1 * x2 - y2 * x3 - y3 * x1)|/2其中点(x1, y1), … , (xn,,yn)为多边形上按逆时针顺序的顶点证明:设三个点A、B、C的坐标分别为A(x1,y1)、B(x2,y2)、C(x3、y3)那么向量AB=a =(x2-原创 2021-11-02 11:01:58 · 4095 阅读 · 0 评论 -
从海量数据中查找某个数
从海量数据中查找top K大或者小的数构建堆找最大的数前K个构建最小堆,找K个最小的数构建最大堆如果这些数据是分布在不同的机器上的。先计算每个机器上的top K ,再使用合并计算整体的top K如果当前文件是个大文件:方案1:先构建堆,再遍历进行堆的调整方案2:分治法:map[分为多个小文件,计算每个topk]reduce[合并汇总]Hash法。如果这1亿个书里面有很多重复的数,先通过Hash法,把这1亿个数字去重复,这样如果重复率很高的话,会减少很大的内存用量,从而缩原创 2021-10-21 22:35:56 · 980 阅读 · 0 评论 -
循环/迭代/递推/回溯/递归----分治/动态规划/贪心
循环:不断重复进行某一运算、操作。示例:for 循环递推:从初值出发反复进行某一运算得到所需结果。-----从已知到未知,从小到达(比如每年长高9cm,20年180,30后270)迭代:不断对前一旧值运算得到新值直到达到精度。一般用于得到近似目标值,反复循环同一运算式(函数),并且总是把前一 次运算结果反代会运算式进行下一次运算例如不断按照梯度下降的方向迭代求出未知参数递归:从所需结果出发不断回溯前一运算直到回到初值再递推得到所需结果----从未知到已知,从大到小,再从小到大(你想进.原创 2021-04-12 14:52:36 · 1081 阅读 · 0 评论 -
leetcode---字符串匹配算法
简介一 暴力匹配(Brute Force 算法),简称BF假设主串长度为N,匹配串长度为M,该算法最坏的情况下需要进行 M*(N-M) 次比较,算法时间复杂度为O(M*N)。二 RK(Robin-Karp,哈希检索):RK算法是对BF算法的一个改进:在BF算法中,每一个字符都需要进行比较,并且当我们发现首字符匹配时仍然需要比较剩余的所有字符。而在RK算法中,就尝试只进行一次比较来判定两者是否相等。RK算法也可以进行多模式匹配,在论文查重等实际应用中一般都是使用此算法。示例:”ABC原创 2021-10-08 15:48:16 · 958 阅读 · 0 评论 -
leetcode--并查集
399. 除法求值给你一个变量对数组 equations 和一个实数值数组 values 作为已知条件,其中 equations[i] = [Ai, Bi] 和 values[i] 共同表示等式 Ai / Bi = values[i] 。每个 Ai 或 Bi 是一个表示单个变量的字符串。另有一些以数组 queries 表示的问题,其中 queries[j] = [Cj, Dj] 表示第 j 个问题,请你根据已知条件找出 Cj / Dj = ? 的结果作为答案。返回 所有问题的答案 。如果存在某个无法.原创 2021-10-19 20:40:06 · 113 阅读 · 0 评论 -
图的表示方法
图的基本概念可以分为 有向图、无向图、有权图 和 无权图图的遍历:DFSBFS常见可以解决的问题有:联通分量,Flood Fill,寻路,走迷宫,迷宫生成,无权图的最短路径,环的判断最小生成树问题(Minimum Spanning Tree):Prim,Kruskal最短路径问题(Shortest Path):Dijkstra,Bellman-Ford拓扑排序(Topological sorting)基本概念顶点(Vertex)边(Edge)路径:比如在无向图 G 中原创 2021-10-19 16:28:12 · 1597 阅读 · 0 评论 -
剑指offer&top 100归类
数学面试题14:剪绳子3(n-3) > 2(n-2), n>5时,尽量剪3面试题16:数值的整数次方2的100次方二分。奇偶分别讨论,递归面试题43:从1到n整数中1出现的次数依此类推,从 1 至 10^ i ,在它们的左数第二位(右数第 i 位)中,任意的 X 都出现了 10^(i-1) 次。1、取第 i 位左边的数字(高位),乘以 10 ^(i−1) ,得到基础值 a 。2、取第 i 位数字,计算修正值:1、如果大于 X,则结果为 a+ 10 ^(i−1) 。原创 2021-10-19 11:31:50 · 351 阅读 · 0 评论 -
leetcode---约瑟夫环
解法一分析:循环的开始和结束:循环的结束取决于圈内是否还有“人”,可以用一个变量alive表示初始人数,每一次出圈,alive - 1。判断alive是否非0即可。如果这个人在圈内,number + 1;如果这个人不在圈内,number + 0。那么,在报数的时候,不需要考虑这个人在不在圈内(每一个人都需要加1或加0,所以,可以在这块优化一下程序)。def joseph(count, doom): alive = count #幸存人数 number = 0 #计数,当number.原创 2021-10-18 14:09:09 · 1445 阅读 · 0 评论 -
leetcode --两数之和,三数之和,四数之和
两数之和: 一遍哈希三数之和:排序+双指针四数之和:排序+三数之和原创 2021-10-17 16:24:21 · 159 阅读 · 0 评论 -
leetcode--随机化算法---蓄水池抽样算法,拒绝采样,Fisher-Yates洗牌算法
蓄水池采样算法“给出一个数据流,这个数据流的长度很大或者未知。并且对该数据流中数据只能访问一次。请写出一个随机选择算法,使得数据流中所有数据被选中的概率相等。”算法过程假设数据序列的规模为 n,需要采样的数量的为 k。首先构建一个可容纳k 个元素的数组,将序列的前 k 个元素放入数组中。然后从第 k+1 个元素开始,以 k/n 的概率来决定该元素最后是否被留在数组中(每进来来一个新的元素,数组中的每个旧元素被替换的概率是相同的)。 当遍历完所有元素之后,数组中剩下的元素即为所需采取的样本。原创 2021-10-14 18:28:35 · 1045 阅读 · 0 评论 -
基本数据结构
1.数据结构与算法常见概念:数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:是组成数据的,有一定意义的基本单位,在计算机中通常作为整体处理,也被称为记录。数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构、树形结构、图形结构以及集合结构。线性结构 数据元素之间一对一的关系树形结构 数据元素之间一对多的关系图状结构或网状结构 结构中的数据元素之间存在原创 2021-10-12 19:01:42 · 373 阅读 · 0 评论 -
基本数据结构--队列
1 基本介绍队列是一种抽象数据结构,具有以下特点:(1)具有先进先出的特性(FIFO)(2)拥有两种基本操作,即加入和删除,而且使用front和rear两个指针来分别指向队列的前端和末尾。队列的基本操作create 创建空队列add 将新数据加入队列的末尾,返回新队列delete 删除队列前端的数据,返回新队列front 返回队列前端的值empty 若队列为空,则返回 ‘真’,否则返回 ‘假’2 实现queue有两种方式可以用数组和链表1.我们先用数组实现原创 2021-10-12 16:56:40 · 376 阅读 · 0 评论 -
基本数据结构--栈
1 基本性质栈(stack),是一种线性存储结构,它有以下几个特点:栈中数据是按照"后进先出(LIFO, Last In First Out)"方式进出栈的。向栈中添加/删除数据时,只能从栈顶进行操作。栈通常包括的三种操作:push、peek、pop。push – 向栈中添加元素。peek – 返回栈顶元素。pop – 返回并删除栈顶元素的操作。2 栈的实现实现一:数组实现的栈,并且只能存储int数据。使用列表实现栈python的内置数据结构list可以用来实现栈,用appen原创 2021-10-12 16:53:00 · 310 阅读 · 1 评论 -
leetcode--环【链表/图】【是否有环/环起点/环长度】
Floyd判断环算法全名Floyd’s cycle detection Algorithm, 又叫龟兔赛跑算法(Floyd’s Tortoise and Hare),常用于链表、数组转化成链表的题目中。当需要判断链表或者数组关于环/是否有环/找循环起始点/循环长度,或者需要利用数组的index和val值时,考虑Floyd算法。判断链表是否有环快慢指针找到环形链表入口给定一个链表,返回链表开始入环的第一个节点。如果链表无环,则返回 null。为了表示给定链表中的环,我们使用整数 pos.原创 2021-10-11 17:57:19 · 538 阅读 · 0 评论 -
二叉搜索树, AVL平衡二叉树,红黑树, B树,B-树,B+树,B*树, trie树
二叉搜索树先介绍下二叉搜索树1.所有非叶子结点至多拥有两个儿子(Left和Right);2.所有结点存储一个关键字;3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;二叉搜索树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告找不到相应的关键字;如果二叉搜索树的所有非叶子结点的左右子树的结点数目均保持差不多(平衡),那原创 2021-10-09 16:39:41 · 236 阅读 · 0 评论 -
leetcode---栈
单个栈计算20. 有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。71. 简化路径给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可原创 2021-09-30 08:46:41 · 576 阅读 · 0 评论 -
leetcode---动态规划系列
斐波那契数列爬楼梯题目描述:有 N 阶楼梯,每次可以上一阶或者两阶,求有多少种上楼梯的方法。定义一个数组 dp 存储上楼梯的方法数(为了方便讨论,数组下标从 1 开始),dp[i] 表示走到第 i 个楼梯的方法数目。可以只用两个变量来存储 dp[i - 1] 和 dp[i - 2],使得原来的 O(N) 空间复杂度优化为 O(1) 复杂度。强盗抢劫题目描述:抢劫一排住户,但是不能抢邻近的住户,求最大抢劫量。定义 dp 数组用来存储最大的抢劫量,其中 dp[i] 表示抢到第 i 个住原创 2021-09-13 21:45:35 · 406 阅读 · 0 评论 -
leetcode--LRU/LFU缓存机制
146. LRU 缓存机制运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。实现 LRUCache 类:LRUCache(int capacity) 以正整数作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1 。void put(int key, int value) 如果关键字已经存在,则变更其数据值;如果关键字不存在,则插入该组「关键字-值」。当缓存容量达到上限时,它原创 2021-09-09 15:31:19 · 146 阅读 · 0 评论 -
leetcode--双指针
3. 无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。11. 盛最多水的容器给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。设置双指针 ii,jj 分别位于容器壁两端,根据规则移动指针(移动较小的那个),并且更新面积最大值 res,直到 i原创 2021-06-30 22:36:48 · 103 阅读 · 0 评论 -
leetcode--查找
二分4. 寻找两个正序数组的中位数给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。方法一:暴力解法:合并以、排序、得到中位数(分析和代码省略)复杂度分析:时间复杂度:O((M + N) \log (M + N))O((M+N)log(M+N)),这里 MM 和 NN 分别是两个数组的长度。空间复杂度:O(M + N)O(M+N)。方法二:实现归并排序、得到中位数(分析和代码省略)复杂度分析:时间复杂度:O(M +原创 2021-06-15 21:13:53 · 210 阅读 · 0 评论 -
leetcode--运算不使用加减乘除
1 加法使用与进位,异或当前位2 除法:29. 两数相除给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。整数除法的结果应当截去(truncate)其小数部分,例如:truncate(8.345) = 8 以及 truncate(-2.7335) = -2...原创 2021-06-15 20:45:55 · 191 阅读 · 0 评论 -
leetcode--位运算
1 原码2 反码反码主要是针对负数的处理。在原码的基础上,符号位不变,其他数值位取反,即把1变成0,把0变成1。反码是为了在计算机中存储二进制,但非真正的二进制值,所以也不直接参与计算。3 补码补码是真正的二进制值了,主要也是针对负数。非负数不变,而负数是在反码的基础上加1。功能 | 示例 | 位运算———————-+—————————+——————–去掉最后一位 | (101101->1.原创 2021-06-01 23:21:15 · 672 阅读 · 2 评论 -
leetcode--堆
def max_heapify(heap, heapSize, root): # 调整列表中的元素并保证以root为根的堆是一个大根堆 ''' 给定某个节点的下标root,这个节点的父节点、左子节点、右子节点的下标都可以被计算出来。 父节点:(root-1)//2 左子节点:2*root + 1 右子节点:2*root + 2 即:左子节点 + 1 ''' left = 2*root + 1原创 2021-05-28 23:12:31 · 116 阅读 · 0 评论 -
leetcode--树
1 前序中序后序,反后序遍历#递归写法,深度优先遍历def dfs(self, root): if root != None: #前序遍历 self.dfs(root.left) print(root.val) self.dfs(root.right) #中序遍历 print(root.val) self.dfs(root.left) self.df原创 2021-05-10 23:11:31 · 158 阅读 · 0 评论 -
leetcode--异或问题
1486. 数组异或操作给你两个整数,n 和 start 。 数组 nums 定义为:nums[i] = start + 2*i(下标从 0 开始)且 n == nums.length 。 请返回 nums 中所有元素按位异或(XOR)后得到的结果。810. 黑板异或游戏黑板上写着一个非负整数数组 nums[i] 。Alice 和 Bob 轮流从黑板上擦掉一个数字,Alice 先手。如果擦除一个数字后,剩余的所有数字按位异或运算得出的结果等于 0 的话,当前玩家游戏失败。 (另外,如果只剩一..原创 2021-05-07 18:43:11 · 329 阅读 · 0 评论 -
Leetcode-trie树,字典树
1 Trie 树实现208. 实现 Trie (前缀树)Trie(发音类似 “try”)或者说 前缀树是一种树形数据结构,用于高效地存储和检索字符串数据集中的键。这一数据结构有相当多的应用情景,例如自动补完和拼写检查。请你实现 Trie 类:Trie() 初始化前缀树对象。void insert(String word) 向前缀树中插入字符串 word 。boolean search(String word) 如果字符串 word 在前缀树中,返回 true(即,在检索之前已经插入);否则,原创 2021-05-06 23:51:41 · 216 阅读 · 0 评论 -
Leetcode-BFS算法---最短最小问题
BFS 和 DFS:BFS找到的路径一定是最短的,但是代价是空间大很多102. 二叉树的层序遍历给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。103. 二叉树的锯齿形层序遍历给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。107. 二叉树的层序遍历 II给定一个二叉树,返回其节点值自底向上的层序遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)116. 填.原创 2021-04-29 21:21:30 · 1165 阅读 · 2 评论 -
Leetcode-回溯算法---DFS --- 全排列/组合/子集问题
全排列问题:46 全排列 给定一个 没有重复数字的序列,返回其所有可能的全排列。################# 给定n,找出所有全排列 ################'''import copydef dfs(path, candidate): if len(candidate) == 0: all_paths.append(path) print(path) for i in range(len(candidate)):原创 2021-04-28 18:27:08 · 732 阅读 · 1 评论 -
字典树
一.字典树,Trie树1 概述又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。2 优点利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希表高。3 性质(1)根节点不包含字符,除根节点外每一个节点都只包含一个字符;(2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串;(3)每个节点的所有子节点包含的字符...原创 2021-03-09 22:05:30 · 286 阅读 · 0 评论 -
leetcode-背包问题
1. 三种背包问题1.1 0-1背包有N件物品和一个容量为V的背包,第i件物品消耗的容量为Ci,价值为Wi,求解放入哪些物品可以使得背包中总价值最大。1.2 完全背包:有N种物品和一个容量为V的背包,每种物品都有无限件可用,第i件物品消耗的容量为Ci,价值为Wi,求解放入哪些物品可以使得背包中总价值最大。1.3 多重背包:有N种物品和一个容量为V的背包,第i种物品最多有Mi件可用,每件物品消耗的容量为Ci,价值为Wi,求解入哪些物品可以使得背包中总价值最大。三种背包问题都有一个共同的限制,.原创 2021-02-25 13:00:18 · 817 阅读 · 0 评论 -
leetcode--子数组问题--前缀和---连续子数组
560 数组,和为k的连续子序列个数哈希 key:前缀和 value:其出现的次数930 相同的二元子数组,和为S哈希前缀和指针,固定右指针,左指针左右移动枚举1的位置,求组合滑动窗口,左右延伸找0974 和可被k整除的连续非空子数组key余数 前缀区间里含有相同余数的个数1590 数组,移除连续最小子序列,使和能被P整除523 连续的子数组和,连续子数组,大小至少为2,和为k的倍数哈希 key前缀和,value最小索引位置724 寻找数组的中心索引(左右侧之和相等原创 2021-02-25 13:03:37 · 381 阅读 · 0 评论
分享