739. 每日温度
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
示例 1:
12>输入: temperatures = [73,74,75,71,69,72,76,73]>输出: [1,1,4,2,1,1,0,0]
示例 2:
12>输入: temperatures = [30,40,50,60]>输出: [1,1,1,0]
示例 3:
12>输入: temperatures = [30,60,90]>输出: [1,1,0]
这里需要使用到单调栈
递减栈(Decreasing Stack)是一种数据结构,通常用于解决与单调递减关系有关的问题。递减栈的特点是栈中的元素按照递减的顺序排列,即栈顶元素是最小的。
递减栈通常用于解决一些在遍历数组或序列时需要寻找某个元素的前/后第一个比它小的元素的问题。通过维护一个递减栈,我们可以在遍历数组的过程中,根据当前元素与栈 ...
74. 搜索二维矩阵
给你一个满足下述两条属性的 m x n 整数矩阵:
每行中的整数从左到右按非严格递增顺序排列。
每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
示例 1:
12>输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3>输出:true
示例 2:
12>输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13>输出:false
用了比较傻的方法,分行二分查找,也就是在每一行都进行二分查找,最后肯定开销巨大,但是能用
1234567891011121314151617181920212223class Solution(object): def searchMatrix(self, matrix, target): """ : ...
763. 划分字母区间
给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。
注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s 。
返回一个表示每个字符串片段的长度的列表。
示例 1:
123456>输入:s = "ababcbacadefegdehijhklij">输出:[9,7,8]>解释:>划分结果为 "ababcbaca"、"defegde"、"hijhklij" 。>每个字母最多出现在一个片段中。>像 "ababcbacadefegde", "hijhklij" 这样的划分是错误的,因为划分的片段数较少。
示例 2:
12>输入:s = "eccbbbbdec">输出:[10]
代码:
1234567891011121314151617181920212223242526class Solution(object): ...
为什么要使用线程池,线程池的好处是什么:
减少资源消耗:避免重复创建、销毁线程带来的性能开销;
提升客观理性:使用线程池可以进行统一的分配,调优和监控;
提升响应速度:任务到达时能立即执行任务;
线程池现有的问题:
线程池的参数并不好配置
线程池执⾏的情况和任务类型相关性较⼤
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) 的额外空间复杂度内完成这个题目吗?( 出于对空间复杂度分析的目的,输出数组 不被视为 额外空间。)
每个位置的结果,即为它左边的数的乘积,乘上它右边的数的乘积。因此,我们只要申请两个数组,一个用来记 ...
刷题笔记
未读
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], ...