- 博客(76)
- 资源 (5)
- 收藏
- 关注
转载 线程和进程
看了一遍排在前面的答案,类似”进程是资源分配的最小单位,线程是CPU调度的最小单位“这样的回答感觉太抽象,都不太容易让人理解。做个简单的比喻:进程=火车,线程=车厢线程在进程下行进(单纯的车厢无法运行) 一个进程可以包含多个线程(一辆火车可以有多个车厢) 不同进程间数据很难共享(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘) 同一进程下不同线程间数据很易共享(A车厢换到B车厢很容易) 进程要比线程消耗更多的计算机资源(采用多列火车相比多个车厢更耗资源) 进程间不会相互影响,一个线程挂
2021-03-29 16:05:43
101
原创 平衡二叉树.327. 区间和的个数
题目描述给定一个整数数组 nums 。区间和 S(i, j) 表示在 nums 中,位置从 i 到 j 的元素之和,包含 i 和 j (i ≤j)。请你以下标 i (0 <= i <= nums.length )为起点,元素个数逐次递增,计算子数组内的元素和。当元素和落在范围 [lower, upper] (包含 lower 和 upper)之内时,记录子数组当前最末元素下标 j ,记作 有效区间和 S(i, j) 。求数组中,值位于范围 [lower, upper] (包含 lo
2021-03-05 21:52:45
169
原创 B树.1649. 通过指令创建有序数组
题目描述给你一个整数数组 instructions ,你需要根据 instructions 中的元素创建一个有序数组。一开始你有一个空的数组nums ,你需要 从左到右 遍历 instructions 中的元素,将它们依次插入 nums 数组中。每一次插入操作的 代价是以下两者的 较小值 :nums 中 严格小于 instructions[i] 的数字数目。 nums 中 严格大于 instructions[i]的数字数目。 比方说,如果要将 3 插入到 nums = [1,2,3,5] ,
2021-03-05 12:18:47
220
原创 滑动窗口. 995. K 连续位的最小翻转次数。
题目描述在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。示例示例 1:输入:A = [0,1,0], K = 1 输出:2 解释:先翻转 A[0],然后翻转 A[2]。示例 2:输入:A = [1,1,0], K = 2 输出:-1 解释:无论我们怎样翻转大小为 2 的子数组,我们都不能使数组
2021-02-18 21:00:40
113
原创 单身狗的贪心765. 情侣牵手
描述N 对情侣坐在连续排列的 2N 个座位上,想要牵到对方的手。 计算最少交换座位的次数,以便每对情侣可以并肩坐在一起。一次交换可选择任意两人,让他们站起来交换座位。人和座位用 0 到 2N-1 的整数表示,情侣们按顺序编号,第一对是 (0, 1),第二对是 (2, 3),以此类推,最后一对是(2N-2, 2N-1)。这些情侣的初始座位 row[i] 是由最初始坐在第 i 个座位上的人决定的。示例示例 1:输入: row = [0, 2, 1, 3] 输出: 1 解释: 我们只需要交
2021-02-14 21:37:55
158
1
原创 61. 旋转链表
描述和示例给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例 1:输入: 1->2->3->4->5->NULL, k = 2 输出: 4->5->1->2->3->NULL 解释: 向右旋转 1 步:5->1->2->3->4->NULL 向右旋转 2 步: 4->5->1->2->3->NULL 示例 2:输入: 0->1->2
2021-02-07 20:38:29
133
原创 839. 相似字符串组
题目描述如果交换字符串 X 中的两个不同位置的字母,使得它和字符串 Y 相等,那么称 X 和 Y两个字符串相似。如果这两个字符串本身是相等的,那它们也是相似的。例如,“tars” 和 “rats” 是相似的 (交换 0 与 2 的位置); “rats” 和 “arts” 也是相似的,但是“star” 不与 “tars”,“rats”,或 “arts” 相似。总之,它们通过相似性形成了两个关联组:{“tars”, “rats”, “arts”} 和 {“star”}。注意,“tars” 和“ar
2021-01-31 19:22:05
109
原创 预处理+回溯1255. 得分最高的单词集合
题目描述你将会得到一份单词表 words,一个字母表 letters (可能会有重复字母),以及每个字母对应的得分情况表 score。请你帮忙计算玩家在单词拼写游戏中所能获得的「最高得分」:能够由 letters 里的字母拼写出的 任意 属于 words单词子集中,分数最高的单词集合的得分。单词拼写游戏的规则概述如下:玩家需要用字母表 letters 里的字母来拼写单词表 words 中的单词。 可以只使用字母表 letters中的部分字母,但是每个字母最多被使用一次。 单词表 words 中
2021-01-18 22:24:28
161
原创 贪心+堆778. 水位上升的泳池中游泳
题目描述在一个 N x N 的坐标方格 grid 中,每一个方格的值 grid[i][j] 表示在位置 (i,j) 的平台高度。现在开始下雨了。当时间为 t 时,此时雨水导致水池中任意位置的水位为 t 。你可以从一个平台游向四周相邻的任意一个平台,但是前提是此时水位必须同时淹没这两个平台。假定你可以瞬间移动无限距离,也就是默认在方格内部游动是不耗时的。当然,在你游泳的时候你必须待在坐标方格里面。你从坐标方格的左上平台 (0,0) 出发。最少耗时多久你才能到达坐标方格的右下平台 (N-1, N-1)?
2021-01-06 22:27:00
124
1
原创 数据结构
对一个问题使用画图、举例、分解这 3 种方法将其化繁为简,形成清晰思路再动手写代码,一张好的图能够更好地帮助去理解一个算法。因此本次分享如何使用画图同时结合经典的题目的方法去阐述数据结构。数据结构与算法有用么? 这里我摘录了一个知乎的高赞回答给大家做参考: 个人认为数据结构是编程最重要的基本功没有之一!学了顺序表和链表,你就知道,在查询操作更多的程序中,你应该用顺序表;而修改操作更多的程序中,你要使用链表;而单向链表不方便怎么办,每次都从头到尾好麻烦啊,怎么办?你这时就会想到双向链表 or
2021-01-04 15:13:40
175
原创 二数和的运用
5642. 大餐计数题目描述大餐 是指 恰好包含两道不同餐品 的一餐,其美味程度之和等于 2 的幂。你可以搭配 任意 两道餐品做一顿大餐。给你一个整数数组 deliciousness ,其中 deliciousness[i] 是第 i道餐品的美味程度,返回你可以用数组中的餐品做出的不同 大餐 的数量。结果需要对 109 + 7 取余。注意,只要餐品下标不同,就可以认为是不同的餐品,即便它们的美味程度相同。来源:力扣(LeetCode) 链接:https://lee
2021-01-04 15:08:59
125
原创 二分查找.540. 有序数组中的单一元素
题目描述给定一个只包含整数的有序数组,每个元素都会出现两次,唯有一个数只会出现一次,找出这个数。示例示例 1:输入: [1,1,2,3,3,4,4,8,8] 输出: 2 示例 2:输入: [3,3,7,7,10,11,11] 输出: 10来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/single-element-in-a-sorted-array著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路这道题巧
2021-01-02 20:42:50
183
原创 堆排序.378. 有序矩阵中第K小的元素
题目描述:给定一个n x n矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素。请注意,它是排序后的第k小元素,而不是第k个不同的元素。示例:matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。分析:题目有两点,每列是排好序的,每行是排好序的。所以我希望,现在每列找到最小的元素,然后根据这个最小的元素进行每行的查找。然后把这行元素更新到列...
2020-12-29 00:05:11
191
原创 从结果出发,浅显易懂的KMP解释
字符串匹配问题是什么?给定一个主串:S给定一个模式串:P在 S 中找到 P 出现的位置,即字符串匹配问题。常见场景如文档搜索。BF分析BF 是暴力搜索的英文简称,暴力一次容易理解,即把所有可能的情况都找到。对于主串 S, 我们从头开始遍历,直到有S[i]==p[0],然后 S 和 P同时向后移动进行匹配,直至失败,或者 P 遍历结束。如果失败,则从 S[i+1] 处继续匹配。代码classSolution:defstrStr(self,hayst...
2020-12-25 16:54:30
207
原创 奇巧淫记之python 堆的妙用. 1046. 最后一块石头的重量
题目描述:有一堆石头,每块石头的重量都是正整数。每一回合,从中选出两块 最重的 石头,然后将它们一起粉碎。假设石头的重量分别为x 和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x != y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。来源:力扣(LeetCode)链接:https://leetcode-cn.com...
2020-12-25 15:57:16
142
原创 贪心. 135. 分发糖果
题目描述:老师想给孩子们分发糖果,有 N个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。你需要按照以下要求,帮助老师给这些孩子分发糖果:每个孩子至少分配到 1 个糖果。相邻的孩子中,评分高的孩子必须获得更多的糖果。那么这样下来,老师至少需要准备多少颗糖果呢?来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/candy著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:输入: ..
2020-12-24 14:53:51
132
原创 字符串匹配,从BF 到 RK 到 KMP
字符串匹配是一道非常经典的题目,在这里,我想写一些自己的见解,从暴力匹配到RK ,最后使用KMP。对于主串 S 和模式串 Pi 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 主串 B B C A B C D A B A B C D .
2020-12-24 00:33:43
110
原创 二叉树.103. 二叉树的锯齿形层序遍历
题目描述:给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树[3,9,20,null,null,15,7],来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:例如:给定二叉树[3,...
2020-12-23 16:21:00
139
原创 黑科技爬楼梯
题目描述数组的每个索引作为一个阶梯,第i个阶梯对应着一个非负数的体力花费值cost[i](索引从0开始)。每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或者爬两个阶梯。您需要找到达到楼层顶部的最低花费。在开始时,你可以选择从索引为 0 或 1 的元素作为初始阶梯。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/min-cost-climbing-stairs著作权归领扣网络所有。商业转载请联系官方..
2020-12-21 14:20:48
107
原创 leetcode 第 221 场周赛
5629.重新格式化电话号码题目描述给你一个字符串形式的电话号码 number 。number 由数字、空格 ’ '、和破折号 ‘-’ 组成。请你按下述方式重新格式化电话号码。首先,删除 所有的空格和破折号。其次,将数组从左到右 每 3 个一组 分块,直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块:2 个数字:单个含 2 个数字的块。3 个数字:单个含 3 个数字的块。4 个数字:两个分别含 2 个数字的块。最后用破折号将这些块连接起来。注意,重新格式化过程中 不应该 生成仅含
2020-12-20 22:43:31
86
原创 回溯.131.分割回文字符串
题目描述给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: “aab”输出: [ [“aa”,“b”], [“a”,“a”,“b”] ]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/palindrome-partitioning著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。思路比起之前的回溯,多了一步判断是否为回文子串。代码class S
2020-12-20 21:09:26
77
原创 回溯+剪枝.39.组合总和
题目描述给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target的组合。candidates 中的数字可以无限制重复被选取。说明:所有数字(包括 target)都是正整数。解集不能包含重复的组合示例 1:输入:candidates = [2,3,6,7],target = 7, 所求解集为: [ [7], [2,2,3] ]示例 2:输入:candidates = [2,3,5], target
2020-12-20 20:14:35
123
1
原创 回溯+剪枝.40.组合总和II
题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明: 所有数字(包括目标数)都是正整数。 解集不能包含重复的组合。示例 1:输入: candidates = [10,1,2,7,6,1,5], target = 8,所求解集为: [ [1, 7], [1, 2, 5], [2, 6], [1, 1, 6] ]示例 2:输入: can
2020-12-20 20:06:10
152
1
原创 389.找不同
问题描述给定两个字符串 s 和 t,它们只包含小写字母。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。请找出在 t 中被添加的字母。示例输入:s = "abcd", t = "abcde"输出:"e"解释:'e' 是那个被添加的字母。思路因为有两个数组,所以我们可以确定一件事,那就是除了那个添加的字母之外,其他字母出现的字母一定为偶数。使用位运算里面的异或运算,因为我们知道异或运算的法则为相同为0,所以对两个数组进行一轮异或运算,最终剩下的就是那个不同的字母了。代
2020-12-19 00:07:29
127
1
原创 814. 二叉树剪枝
题目描述给定二叉树根结点 root ,此外树的每个结点的值要么是 0,要么是 1。返回移除了所有不包含 1 的子树的原二叉树。( 节点 X 的子树为 X 本身,以及所有 X 的后代。)来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/binary-tree-pruning著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例思路尾递归当前节点为0,且左右节点为空,剪枝代码class Solution:
2020-12-19 00:00:02
142
1
原创 动态规划之股票问题309
问题描述:给定一个整数数组,其中第i个元素代表了第i天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-with-cooldow...
2020-12-17 22:44:34
135
原创 动态规划之股票问题188
问题描述:给定一个整数数组prices ,它的第 i 个元素prices[i] 是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iv著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请...
2020-12-17 21:59:14
176
原创 动态规划之股票问题123
问题描述:给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成两笔交易。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-iii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:输入: [3,...
2020-12-17 21:55:46
355
2
原创 动态规划之股票问题714
题目描述:给定一个整数数组prices,其中第i个元素代表了第i天的股票价格 ;非负整数fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。返回获得利润的最大值。注意:这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-...
2020-12-17 21:29:34
222
原创 动态规划之股票问题122
问题描述:给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。示例:..
2020-12-17 21:25:37
222
原创 动态规划之股票问题121
股票问题作为动态规划里十分经典的题目,也有着一些难度,在这里,我试图给出一套股票问题的模板。使用这套模板,打到资本主义的压榨。121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II123. 买卖股票的最佳时机 III188. 买卖股票的最佳时机 IV309. 最佳买卖股票时机含冷冻期714. 买卖股票的最佳时机含手续费题目描述 :121给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所.
2020-12-17 21:03:47
543
原创 1319. 连通网络的操作次数
题目描述:用以太网线缆将n台计算机连接成一个网络,计算机的编号从0到n-1。线缆用connections表示,其中connections[i] = [a, b]连接了计算机a和b。网络中的任何一台计算机都可以通过网络直接或者间接访问同一个网络中其他任意一台计算机。给你这个计算机网络的初始布线connections,你可以拔开任意两台直连计算机之间的线缆,并用它连接一对未直连的计算机。请你计算并返回使所有计算机都连通所需的最少操作次数。如果不可能,则返回-1 。...
2020-12-15 23:40:40
172
1
原创 并查集路径压缩的妙用
对比 结论:很明显,路径压缩可以节省向上搜索的时间。思考:在并查集中,我们并不关心,父节点是谁,我们关心的是祖宗。实现:# 迭代def find(x): while x != pre[x]: pre[x] = pre[pre[x]] x = pre[x] return x# 递归def find(x): if x != pre[x]: pre[x] = find(pre[x].
2020-12-15 23:23:35
181
原创 924. 尽量减少恶意软件的传播
题目描述:在节点网络中,只有当 graph[i][j] = 1时,每个节点i能够直接连接到另一个节点 j。一些节点initial最初被恶意软件感染。只要两个节点直接连接,且其中至少一个节点受到恶意软件的感染,那么两个节点都将被恶意软件感染。这种恶意软件的传播将继续,直到没有更多的节点可以被这种方式感染。假设 M(initial) 是在恶意软件停止传播之后,整个网络中感染恶意软件的最终节点数。我们可以从初始列表中删除一个节点。如果移除这一节点将最小化 M(initial),则返回...
2020-12-15 13:17:03
341
1
原创 并查集
什么是并查集:并查集是一种图结构,为了找出所有存在的关系,如图中所示,若A和B之间存在关系,B和C存在关系,那么A、B、C构成一条连通分量,这么做的目的是什么呢?我们可以假设一个场景,在日常生活中,A想和C交朋友,但是A不认识C(不存在关系),但是A认识B(存在关系),且A知道B认识C,那么A就可以通过B认识C,形成一种递推结构。数据结构中如何保存这样一组关系呢?首先A存在的是B的位置,B存储的是C的位置,那么A首先得到B的位置,然后就能确定C的位置了。通俗来说,可以理解为找祖宗。
2020-12-15 12:11:36
111
1
原创 基于多线程的并发爬虫
import requestsimport bs4import multiprocessingimport threadingimport timefrom multiprocessing import QueueexitFlag = 0start = time.time()class myThread (threading.Thread): def __init__(self, q): threading.Thread.__init__(self) .
2020-12-14 17:50:29
239
1
原创 Django.使用F()解决竞争问题
什么是竞争问题: 多个用户,同时操作某一字段时,没有期望的返回。F()函数:from django.db.models import Fdef vote(request, choice_id): selected_choice = question.choice_set.get(pk=request.POST['choice']) selected_choice.votes = F('votes') + 1 selected_choice.save()...
2020-12-14 10:07:34
234
原创 面试题17.17 多次搜索
题目描述给定一个较长字符串big和一个包含较短字符串的数组smalls,设计一个方法,根据smalls中的每一个较短字符串,对big进行搜索。输出smalls中的字符串在big里出现的所有位置positions,其中positions[i]为smalls[i]出现的所有位置示例输入:big = "mississippi"smalls = ["is","ppi","hi","sis","i","ssippi"]输出: [[1,4],[8],[],[3],[1,4,7,10],[5]]思路
2020-12-13 19:17:02
278
1
原创 Django的MVC
polls/ __init__.py admin.py apps.py templates/ index.html 404.html migrations/ __init__.py models.py urls.py tests.py views.pymodelsfrom django.db import modelsfrom django.utils import t...
2020-12-12 22:52:10
88
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人