自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Keep Coding

点关注,不迷路 ↓↓↓❤️

  • 博客(47)
  • 收藏
  • 关注

原创 写于LeetCode刷完900题之际的感想

时光匆匆,距离开始写博客转瞬便是大半年已过, 从最初寒假每天十题的刷题狂热信徒,到如今一周也做不到二十题的佛系上岸选手,有了很多感想经验,因而有了这篇文章。我的第一轮刷题,始于二叉树,接着按照二叉搜索树, 哈希表,栈, 堆,优先级队列,贪心, 数组,链表, 二分查找, 字符串, DFS, 回溯, BFS, 字典树, 并查集,动态规划这样的顺序, 在同一个Tag内按由易到难的顺序做题(ha...

2019-11-01 08:35:52 7506 10

原创 LeetCode-Python-1269. 停在原地的方案数(DP)

有一个长度为arrLen的数组,开始有一个指针在索引0 处。每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。给你两个整数steps 和arrLen ,请你计算并返回:在恰好执行steps次操作以后,指针仍然指向索引0 处的方案数。由于答案可能会很大,请返回方案数 模10^9 + 7 后的结果。示例 1:输入:...

2019-11-25 11:31:38 605

原创 LeetCode-Python-1268. 搜索推荐系统( 二分查找 + 字符串)

给你一个产品数组products和一个字符串searchWord,products数组中每个产品都是一个字符串。请你设计一个推荐系统,在依次输入单词searchWord 的每一个字母后,推荐products 数组中前缀与searchWord 相同的最多三个产品。如果前缀相同的可推荐产品超过三个,请按字典序返回最小的三个。请你以二维列表的形式,返回在输入search...

2019-11-25 11:26:34 797

原创 LeetCode-Python-1267. 统计参与通信的服务器(模拟)

这里有一幅服务器分布图,服务器的位置标识在m * n的整数矩阵网格grid中,1 表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列,我们就认为它们之间可以进行通信。请你统计并返回能够与至少一台其他服务器进行通信的服务器的数量。示例 1:输入:grid = [[1,0],[0,1]]输出:0解释:没有一台服务器能与其他服务器进行通信。示例 2...

2019-11-25 11:18:22 871

原创 LeetCode-Python-1266. 访问所有点的最小时间 (数组 + 数学)

平面上有n个点,点的位置用整数坐标表示points[i] = [xi, yi]。请你计算访问所有这些点需要的最小时间(以秒为单位)。你可以按照下面的规则在平面上移动:每一秒沿水平或者竖直方向移动一个单位长度,或者跨过对角线(可以看作在一秒内向水平和竖直方向各移动一个单位长度)。必须按照数组中出现的顺序来访问这些点。示例 1:输入:points = [[1,1],[3,4...

2019-11-25 11:09:56 635

原创 LeetCode-Python-386. 字典序排数(排序 + DFS)

给定一个整数n, 返回从1到n的字典顺序。例如,给定 n =1 3,返回 [1,10,11,12,13,2,3,4,5,6,7,8,9] 。请尽可能的优化算法的时间复杂度和空间复杂度。 输入的数据n小于等于5,000,000。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/lexicographical-num...

2019-11-22 10:40:32 1265

原创 LeetCode-Python-973. 最接近原点的 K 个点(排序 + 堆 + Partition)

我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)你可以按任何顺序返回答案。除了点坐标的顺序之外,答案确保是唯一的。示例 1:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]解释:(1, 3) 和原点之间的距离为 sqrt(10),...

2019-11-22 10:28:49 673

原创 LeetCode600题打卡留念

2019.11.19600题成就达成其实早就超过600题了,只是我开了两个session所以单一session一直没到……下一阶段目标:1.在学校幸存2. 修订博文3. 提高码力4. 复习一直学不会的Tag,比如DP5. 换一个帽子或者一件卫衣...

2019-11-20 06:23:48 255

原创 LeetCode-Python-1161. 最大层内元素和(层序遍历 + BFS)

给你一个二叉树的根节点root。设根节点位于二叉树的第 1 层,而根节点的子节点位于第 2 层,依此类推。请你找出层内元素之和 最大 的那几层(可能只有一层)的层号,并返回其中最小 的那个。示例:输入:[1,7,0,7,-8,null,null]输出:2解释:第 1 层各元素之和为 1,第 2 层各元素之和为 7 + 0 = 7,第 3 层各元素之和为 7 + -8...

2019-11-20 06:15:17 309

原创 LeetCode-Python-1198. 找出所有行中最小公共元素(哈希表 + 矩阵降维)

给你一个矩阵mat,其中每一行的元素都已经按 递增 顺序排好了。请你帮忙找出在所有这些行中 最小的公共元素。如果矩阵中没有这样的公共元素,就请返回-1。示例:输入:mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]]输出:5提示:1 <= mat.length, mat[i].length &l...

2019-11-20 06:01:44 2937

原创 LeetCode-Python-1257. 最小公共区域(哈希表)

给你一些区域列表regions ,每个列表的第一个区域都包含这个列表内所有其他区域。很自然地,如果区域X 包含区域Y ,那么区域X 比区域Y 大。给定两个区域region1和region2 ,找到同时包含这两个区域的最小区域。如果区域列表中r1包含r2和r3 ,那么数据保证r2 不会包含r3。数据同样保证最小公共区域一定存在。示例 1...

2019-11-17 13:00:06 420

原创 LeetCode-Python-1262. 可被三整除的最大和(哈希表 + 数学)

思路:先把nums排好序,然后开一个字典,把nums里的数按照对3取模的值进行分类,然后会存在三种情况:sum(nums) % 3 == 0,此时无需任何处理,直接返回sum(nums)即可。sum(nums) % 3 == 1,此时有两种可能的解决办法: a. 删除一个模为1的最小数;b. 删除模为2的最小的两个数;选择删除之后剩余和最大的情况返回即可。sum(nums) % 3 ...

2019-11-17 12:40:55 867

原创 LeetCode-Python-1261.在受污染的二叉树中查找元素(DFS + 集合)

思路利用DFS按题目要求建树,建树过程中用一个集合 self.values,记录树中所有的值,这样可以快速知道一个值在不在树中。代码实现class FindElements(object): def __init__(self, root): """ :type root: TreeNode """ root.va...

2019-11-17 12:39:45 346

原创 LeetCode-Python-1260.二维网格迁移 (数组)

思路:观察题意可以发现,只要先把二维网格里所有的元素按顺序提取出来,把最后k个数提取出来,并插入到数组的开头,再把新的数组按顺序放回到二维网格即可。代码实现:class Solution(object): def shiftGrid(self, grid, k): """ :type grid: List[List[int]] :...

2019-11-17 12:38:24 464

原创 Leetcode-Python-1259. 不相交的握手(递归 + 数学(卡特兰数)+ DP)

偶数个人站成一个圆,总人数为num_people。每个人与除自己外的一个人握手,所以总共会有num_people / 2次握手。将握手的人之间连线,请你返回连线不会相交的握手方案数。由于结果可能会很大,请你返回答案 模10^9+7后的结果。示例 1:输入:num_people = 2输出:1示例 2:输入:num_people = 4输出:2解释:总...

2019-11-17 06:15:55 1214

原创 LeetCode-Python-1258. 近义词句子 ( DFS)

给你一个近义词表synonyms 和一个句子text,synonyms 表中是一些近义词对 ,你可以将句子text 中每个单词用它的近义词来替换。请你找出所有用近义词替换后的句子,按字典序排序后返回。示例 1:输入:synonyms = [["happy","joy"],["sad","sorrow"],["joy","cheerful"]],text = "I...

2019-11-17 00:39:25 715

原创 LeetCode-Python-1256. 加密数字 (数学 + 字符串)

给你一个非负整数num,返回它的「加密字符串」。加密的过程是把一个整数用某个未知函数进行转化,你需要从下表推测出该转化函数:示例 1:输入:num = 23输出:"1000"示例 2:输入:num = 107输出:"101100"提示:0 <= num <= 10^9思路:观察法总结规律:1 - 03 - 00...

2019-11-17 00:10:14 563

原创 LeetCode-Python-1219. 黄金矿工(DFS + 回溯)

你要开发一座金矿,地质勘测学家已经探明了这座金矿中的资源分布,并用大小为m * n 的网格 grid 进行了标注。每个单元格中的整数就表示这一单元格中的黄金数量;如果该单元格是空的,那么就是 0。为了使收益最大化,矿工需要按以下规则来开采黄金:每当矿工进入一个单元,就会收集该单元格中的所有黄金。矿工每次可以从当前位置向上下左右四个方向走。每个单元格只能被开采(进入)一次。不得开采(...

2019-11-15 11:51:32 2333

原创 LeetCode-Python-430. 扁平化多级双向链表(暴力解 + 栈迭代 + 递归)

您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。示例:输入:1---2---3---4---5---6--NULL | 7---8---9---1...

2019-11-15 10:21:28 509

原创 LeetCode-Python-809. 情感丰富的文字 (双指针)

有时候人们会用重复写一些字母来表示额外的感受,比如 "hello" -> "heeellooo", "hi" -> "hiii"。我们将相邻字母都相同的一串字符定义为相同字母组,例如:"h", "eee", "ll", "ooo"。对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张操作定义如...

2019-11-15 06:53:33 492

原创 LeetCode-Python-299. 猜数字游戏(桶排序)

你正在和你的朋友玩猜数字(Bulls and Cows)游戏:你写下一个数字让你的朋友猜。每次他猜测后,你给他一个提示,告诉他有多少位数字和确切位置都猜对了(称为“Bulls”, 公牛),有多少位数字猜对了但是位置不对(称为“Cows”, 奶牛)。你的朋友将会根据提示继续猜,直到猜出秘密数字。请写出一个根据秘密数字和朋友的猜测数返回提示的函数,用 A 表示公牛,用B表示奶牛。请注意秘...

2019-11-15 06:27:00 851 1

原创 LeetCode-Python-315. 计算右侧小于当前元素的个数 (暴力法 + 二分查找 + 二分搜索树)

给定一个整数数组 nums,按要求返回一个新数组counts。数组 counts 有该性质: counts[i] 的值是nums[i] 右侧小于nums[i] 的元素的数量。示例:输入: [5,2,6,1]输出: [2,1,1,0]解释:5 的右侧有 2 个更小的元素 (2 和 1).2 的右侧仅有 1 个更小的元素 (1).6 的右侧有 1 个更小的元素 (1).1...

2019-11-15 06:04:51 895

原创 LeetCode-Python-1055. 形成字符串的最短路径 (双指针)

对于任何字符串,我们可以通过删除其中一些字符(也可能不删除)来构造该字符串的子序列。给定源字符串source 和目标字符串target,找出源字符串中能通过串联形成目标字符串的子序列的最小数量。如果无法通过串联源字符串中的子序列来构造目标字符串,则返回-1。示例 1:输入:source = "abc", target = "abcbc"输出:2解释:目标字符串 "abc...

2019-11-14 10:47:06 2845

原创 LeetCode-Python-1170. 比较字符串最小字母出现频次(数组 + 字符串 + 二分查找)

我们来定义一个函数f(s),其中传入参数s是一个非空字符串;该函数的功能是统计s 中(按字典序比较)最小字母的出现频次。例如,若s = "dcce",那么f(s) = 2,因为最小的字母是"c",它出现了2 次。现在,给你两个字符串数组待查表queries和词汇表words,请你返回一个整数数组answer作为答案,其中每个answer[i]是满足f(qu...

2019-11-14 05:15:02 362

原创 LeetCode-Python-482. 密钥格式化(字符串)

给定一个密钥字符串S,只包含字母,数字以及 '-'(破折号)。N 个 '-' 将字符串分成了 N+1 组。给定一个数字 K,重新格式化字符串,除了第一个分组以外,每个分组要包含 K 个字符,第一个分组至少要包含 1 个字符。两个分组之间用 '-'(破折号)隔开,并且将所有的小写字母转换为大写字母。给定非空字符串 S 和数字 K,按照上面描述的规则进行格式化。示例 1:输入:S = "5...

2019-11-14 05:00:30 660

原创 LeetCode-Python-191. 位1的个数(位运算)

编写一个函数,输入是一个无符号整数,返回其二进制表达式中数字位数为 ‘1’的个数(也被称为汉明重量)。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011中,共有三位为 '1'。示例 2:输入:0000000000000000000000001000...

2019-11-13 11:17:00 909

原创 LeetCode-Python-436. 寻找右区间 (数组 + 哈希表 + 二分查找)

给定一组区间,对于每一个区间 i,检查是否存在一个区间 j,它的起始点大于或等于区间i 的终点,这可以称为 j 在 i 的“右侧”。对于任何区间,你需要存储的满足条件的区间j 的最小索引,这意味着区间 j 有最小的起始点可以使其成为“右侧”区间。如果区间j 不存在,则将区间 i 存储为 -1。最后,你需要输出一个值为存储的区间值的数组。注意:你可以假设区间的终点总是大于它的起始点...

2019-11-13 10:57:37 377

原创 LeetCode-Python-1230. 抛掷硬币(数学 + DP)

有一些不规则的硬币。在这些硬币中,prob[i]表示第i枚硬币正面朝上的概率。请对每一枚硬币抛掷一次,然后返回正面朝上的硬币数等于target的概率。示例 1:输入:prob = [0.4], target = 1输出:0.40000示例 2:输入:prob = [0.5,0.5,0.5,0.5,0.5], target = 0输出:0.03125提...

2019-11-13 10:49:12 991

原创 LeetCode-Python-1229. 安排会议日程(区间+数组)

你是一名行政助理,手里有两位客户的空闲时间表:slots1和slots2,以及会议的预计持续时间duration,请你为他们安排合适的会议时间。「会议时间」是两位客户都有空参加,并且持续时间能够满足预计时间duration的最早的时间间隔。如果没有满足要求的会议时间,就请返回一个空数组。「空闲时间」的格式是[start, end],由开始时间start和结束时...

2019-11-13 10:29:52 1144

原创 LeetCode-Python-1228. 等差数列中缺失的数字(数组)

有一个数组,其中的值符合等差数列的数值规律,也就是说:在0 <= i < arr.length - 1的前提下,arr[i+1] - arr[i]的值都相等。我们会从该数组中删除一个 既不是第一个 也不是最后一个的值,得到一个新的数组arr。给你这个缺值的数组arr,请你帮忙找出被删除的那个数。示例 1:输入:arr = [5,7,11,13]输...

2019-11-13 10:25:39 855

原创 LeetCode-Python-1255. 得分最高的单词集合(回溯)

你将会得到一份单词表words,一个字母表letters(可能会有重复字母),以及每个字母对应的得分情况表score。请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由letters里的字母拼写出的任意属于words单词子集中,分数最高的单词集合的得分。单词拼写游戏的规则概述如下:玩家需要用字母表letters里的字母来拼写单词表words中的单...

2019-11-10 12:48:35 565

原创 LeetCode-Python-1254. 统计封闭岛屿的数目(DFS)

有一个二维矩阵grid,每个位置要么是陆地(记号为0)要么是水域(记号为1)。我们从一块陆地出发,每次可以往上下左右4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。如果一座岛屿完全由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。请返回封闭岛屿的数目。示例 1:输入:grid = [[1,1,...

2019-11-10 12:30:37 1200

原创 LeetCode-Python-1253. 重构 2 行二进制矩阵(模拟法)

给你一个2行n列的二进制数组:矩阵是一个二进制矩阵,这意味着矩阵中的每个元素不是0就是1。 第0行的元素之和为upper。 第1行的元素之和为lower。 第i列(从0开始编号)的元素之和为colsum[i],colsum是一个长度为n的整数数组。你需要利用upper,lower和colsum来重构这个矩阵,并以二维整数数组的形式返回它...

2019-11-10 12:23:25 402

原创 LeetCode-Python-1252. 奇数值单元格的数目(暴力法)

给你一个n行m列的矩阵,最开始的时候,每个单元格中的值都是0。另有一个索引数组indices,indices[i] = [ri, ci]中的ri和ci分别表示指定的行和列(从0开始编号)。你需要将每对[ri, ci]指定的行和列上的所有单元格的值加1。请你在执行完所有indices指定的增量操作后,返回矩阵中 「奇数值单元格」 的数目。示例...

2019-11-10 12:19:39 544

原创 LeetCode-Python-477. 汉明距离总和 (位运算)

两个整数的汉明距离 指的是这两个数字的二进制数对应位不同的数量。计算一个数组中,任意两个数之间汉明距离的总和。示例:输入: 4, 14, 2输出: 6解释: 在二进制表示中,4表示为0100,14表示为1110,2表示为0010。(这样表示是为了体现后四位之间关系)所以答案为:HammingDistance(4, 14) + HammingDistance(4, 2) +...

2019-11-08 13:31:36 530

原创 LeetCode-Python-1231. 分享巧克力(二分试探法)

你有一大块巧克力,它由一些甜度不完全相同的小块组成。我们用数组sweetness来表示每一小块的甜度。你打算和K名朋友一起分享这块巧克力,所以你需要将切割K次才能得到 K+1块,每一块都由一些 连续的小块组成。为了表现出你的慷慨,你将会吃掉总甜度最小 的一块,并将其余几块分给你的朋友们。请找出一个最佳的切割策略,使得你所分得的巧克力总甜度最大,并返回这个 最大总甜度...

2019-11-07 12:14:14 4382

原创 LeetCode-Python-792. 匹配子序列的单词数(字符串 + 二分查找 + 哈希表)

给定字符串 S 和单词字典 words, 求words[i]中是S的子序列的单词个数。示例:输入:S = "abcde"words = ["a", "bb", "acd", "ace"]输出: 3解释: 有三个是S 的子序列的单词: "a", "acd", "ace"。注意:所有在words和S里的单词都只由小写字母组成。S 的长度在[1, 50000]。...

2019-11-05 11:02:26 643

原创 LeetCode-Python-392. 判断子序列(字符串 + 双指针)

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。示例1:s ...

2019-11-05 10:32:10 725

原创 LeetCode-Python-1232. 缀点成线(数学)

在一个XY 坐标系中有一些点,我们用数组coordinates来分别记录它们的坐标,其中coordinates[i] = [x, y]表示横坐标为x、纵坐标为y的点。请你来判断,这些点是否在该坐标系中属于同一条直线上,是则返回 <font color="#c7254e" face="Menlo, Monaco, Consolas, Courier New, monospa...

2019-11-04 10:57:33 548

原创 LeetCode-Python-1250. 检查「好数组」(数学)

给你一个正整数数组 nums,你需要从中任选一些子集,然后将子集中每一个数乘以一个 任意整数,并求出他们的和。假如该和结果为1,那么原数组就是一个「好数组」,则返回 True;否则请返回 False。示例 1:输入:nums = [12,5,7,23]输出:true解释:挑选数字 5 和 7。5*3 + 7*(-2) = 1示例 2:输入:nums = [29,6,...

2019-11-04 08:24:05 336

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除