为什么要使用线程池,线程池的好处是什么:
减少资源消耗:避免重复创建、销毁线程带来的性能开销;
提升客观理性:使用线程池可以进行统一的分配,调优和监控;
提升响应速度:任务到达时能立即执行任务;
线程池现有的问题:
线程池的参数并不好配置
线程池执⾏的情况和任务类型相关性较⼤
IO密集型和CPU密集型的任务运⾏起来的情况差异⾮常⼤
一些现有的框架如:Disruptor框架、Actor框架、协程框架,但是框架难以维护和扩展.
所以既然不能保证参数配 置最合理,那么是否可以通过将修改线程池参数的成本降下来,这样⾄少可以发⽣故障的时候可以快速 调整从⽽缩短故障恢复的时间?基于这个思考,我们可以将线程池的参数从代码中迁移到注册中心上, 实现线程池参数可动态配置和即时⽣效。
缓冲队列
刷题笔记
未读
17. 电话号码的字母组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例 1:
12>输入:digits = "23">输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]
示例 2:
12>输入:digits = "">输出:[]
示例 3:
12>输入:digits = "2">输出:["a","b","c"]
代码:
1234567891011121314151617181920212223242526class Solution(object): def let ...
189. 轮转数组
给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。
示例 1:
123456>输入: nums = [1,2,3,4,5,6,7], k = 3>输出: [5,6,7,1,2,3,4]>解释:>向右轮转 1 步: [7,1,2,3,4,5,6]>向右轮转 2 步: [6,7,1,2,3,4,5]>向右轮转 3 步: [5,6,7,1,2,3,4]
示例 2:
12345>输入:nums = [-1,-100,3,99], k = 2>输出:[3,99,-1,-100]>解释: >向右轮转 1 步: [99,-1,-100,3]>向右轮转 2 步: [3,99,-1,-100]
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
0 <= k <= 105
进阶:
尽可能想出更多的解决方案,至少有 三种 不同的方法可以解决这个问题。
你可以使用空间复杂度为 O( ...
刷题笔记
未读
22. 括号生成
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
示例 1:
12>输入:n = 3>输出:["((()))","(()())","(())()","()(())","()()()"]
示例 2:
12>输入:n = 1>输出:["()"]
提示:
1 <= n <= 8
回溯需要画出树形图,能够发现其实原题能够转化为一个满二叉树
但是根据情况肯定不能输出所有节点的值,所以需要一些剪枝。这里增加了left与right参数,分别代表左括号与右括号的数量,每生成一个就增加一个。
代码:
12345678910111213141516171819class Solution(object): def generateParenthesis(self, n): """ :type n: int ...
238. 除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。
题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。
请 不要使用除法,且在 O(n) 时间复杂度内完成此题。
示例 1:
12>输入: nums = [1,2,3,4]>输出: [24,12,8,6]
示例 2:
12>输入: nums = [-1,1,0,-3,3]>输出: [0,0,9,0,0]
提示:
2 <= nums.length <= 105
-30 <= nums[i] <= 30
保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内
进阶:你可以在 O(1) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
每个位置的结果,即为它左边的数的乘积,乘上它右边的数的乘积。因此,我们只要申请两个数组,一个用来记 ...
41. 缺失的第一个正数
给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。
请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。
示例 1:
123>输入:nums = [1,2,0]>输出:3>解释:范围 [1,2] 中的数字都在数组中。
示例 2:
123>输入:nums = [3,4,-1,1]>输出:2>解释:1 在数组中,但 2 没有。
示例 3:
123>输入:nums = [7,8,9,11,12]>输出:1>解释:最小的正数 1 没有出现。
提示:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
这个问题可以通过将数组中的每个数字放到它应该在的位置来解决,即 nums[i] 应该放在 nums[i-1] 的位置,相当于把原来的数组当作一个哈希表来使用,具体步骤如下:
初始化:设置 max_len 为数组长度加1,这是我们需要处理的最大正整数。
标记无效数字:将所有非正数或大于 ...
刷题笔记
未读
39. 组合总和
给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返回这些组合。
candidates 中的 同一个 数字可以 无限制重复被选取 。如果至少一个数字的被选数量不同,则两种组合是不同的。
对于给定的输入,保证和为 target 的不同组合数少于 150 个。
示例 1:
123456>输入:candidates = [2,3,6,7], target = 7>输出:[[2,2,3],[7]]>解释:>2 和 3 可以形成一组候选,2 + 2 + 3 = 7 。注意 2 可以使用多次。>7 也是一个候选, 7 = 7 。>仅有这两种组合。
示例 2:
12>输入: candidates = [2,3,5], target = 8>输出: [[2,2,2,2],[2,3,3],[3,5]]
示例 3:
12>输入: candidates = [2], ...
刷题笔记
未读
46. 全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例 1:
12>>输入:nums = [1,2,3]>>输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例 2:
12>>输入:nums = [0,1]>>输出:[[0,1],[1,0]]
示例 3:
12>>输入:nums = [1]>>输出:[[1]]
提示:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
nums 中的所有整数 互不相同
终止条件: 当 x = len(nums) - 1 时,代表所有位已固定(最后一位只有 1 种情况),则将当前组合 nums 转化为数组并加入 res ,并返回。
1234567891011121314151617>class Solution(object): def permute(self, ...
56. 合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。
示例 1:
123>输入:intervals = [[1,3],[2,6],[8,10],[15,18]]>输出:[[1,6],[8,10],[15,18]]>解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:
123>输入:intervals = [[1,4],[4,5]]>输出:[[1,5]]>解释:区间 [1,4] 和 [4,5] 可被视为重叠区间。
提示:
1 <= intervals.length <= 104
intervals[i].length == 2
0 <= starti <= endi <= 104
使用左区间进行排序以示例 1 为例,我们有 [1,3],[2,6],[8,10],[15,18] 这四个区间。
为 ...
53. 最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组
是数组中的一个连续部分。
示例 1:
123>输入:nums = [-2,1,-3,4,-1,2,1,-5,4]>输出:6>解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
12>输入:nums = [1]>输出:1
示例 3:
12>输入:nums = [5,4,-1,7,8]>输出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。
1234567891011121314151617# 动态规划class Solution(object): def maxSubArray(self, nums): """ :type nums: List[ ...