力扣周赛293题解
第一题
力扣原题链接:
2273. 移除字母异位词后的结果数组
单个题解:
力扣2273. 移除字母异位词后的结果数组
题目:
给你一个下标从 0 开始的字符串 words ,其中 words[i] 由小写英文字符组成。
在一步操作中,需要选出任一下标 i ,从 words 中 删除 words[i] 。其中下标 i 需要同时满足下述两个条件:
0 < i < words.length
words[i - 1] 和 words[i] 是 字母异位词 。
只要可以选出满足条件的下标,就一直执行这个操作。
在执行所有操作后,返回 words 。可以证明,按任意顺序为每步操作选择下标都会得到相同的结果。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。例如,"dacb" 是 "abdc" 的一个字母异位词。
示例 1:
输入:words = ["abba","baba","bbaa","cd","cd"]
输出:["abba","cd"]
解释:
获取结果数组的方法之一是执行下述步骤 ...
力扣2276. 统计区间中的整数数目
力扣周赛293–第四题
2276. 统计区间中的整数数目
题目
给你区间的 空 集,请你设计并实现满足要求的数据结构:
新增:添加一个区间到这个区间集合中。
统计:计算出现在 至少一个 区间中的整数个数。
实现 CountIntervals 类:
CountIntervals() 使用区间的空集初始化对象
void add(int left, int right) 添加区间 [left, right] 到区间集合之中。
int count() 返回出现在 至少一个 区间中的整数个数。
注意:区间 [left, right] 表示满足 left <= x <= right 的所有整数 x 。
示例 1:
输入
["CountIntervals", "add", "add", "count", "add", "count"]
[[], [2, 3], [7, 10], [], [5, 8], []]
输出
[null, null, null, 6, null, 8]
解释
CountIntervals countIntervals = new ...
力扣2275. 按位与结果大于零的最长组合
力扣周赛293–第三题
2275. 按位与结果大于零的最长组合
题目
对数组 nums 执行 按位与 相当于对数组 nums 中的所有整数执行 按位与 。
例如,对 nums = [1, 5, 3] 来说,按位与等于 1 & 5 & 3 = 1 。
同样,对 nums = [7] 而言,按位与等于 7 。
给你一个正整数数组 candidates 。计算 candidates 中的数字每种组合下 按位与 的结果。 candidates 中的每个数字在每种组合中只能使用 一次 。
返回按位与结果大于 0 的 最长 组合的长度。
示例 1:
输入:candidates = [16,17,71,62,12,24,14]
输出:4
解释:组合 [16,17,62,24] 的按位与结果是 16 & 17 & 62 & 24 = 16 > 0 。
组合长度是 4 。
可以证明不存在按位与结果大于 0 且长度大于 4 的组合。
注意,符合长度最大的组合可能不止一种。
例如,组合 [62,12,24,14] 的按 ...
力扣2274. 不含特殊楼层的最大连续楼层数
力扣周赛293–第二题
2274. 不含特殊楼层的最大连续楼层数
题目
Alice 管理着一家公司,并租用大楼的部分楼层作为办公空间。Alice 决定将一些楼层作为 特殊楼层 ,仅用于放松。
给你两个整数 bottom 和 top ,表示 Alice 租用了从 bottom 到 top(含 bottom 和 top 在内)的所有楼层。另给你一个整数数组 special ,其中 special[i] 表示 Alice 指定用于放松的特殊楼层。
返回不含特殊楼层的 最大 连续楼层数。
示例 1:
输入:bottom = 2, top = 9, special = [4,6]
输出:3
解释:下面列出的是不含特殊楼层的连续楼层范围:
- (2, 3) ,楼层数为 2 。
- (5, 5) ,楼层数为 1 。
- (7, 9) ,楼层数为 3 。
因此,返回最大连续楼层数 3 。
示例 2:
输入:bottom = 6, top = 8, special = [7,6,8]
输出:0
解释:每层楼都被规划为特殊楼层,所以返回 0 。
提示
1 ...
力扣2273. 移除字母异位词后的结果数组
力扣周赛293–第一题
2273. 移除字母异位词后的结果数组
题目
给你一个下标从 0 开始的字符串 words ,其中 words[i] 由小写英文字符组成。
在一步操作中,需要选出任一下标 i ,从 words 中 删除 words[i] 。其中下标 i 需要同时满足下述两个条件:
0 < i < words.length
words[i - 1] 和 words[i] 是 字母异位词 。
只要可以选出满足条件的下标,就一直执行这个操作。
在执行所有操作后,返回 words 。可以证明,按任意顺序为每步操作选择下标都会得到相同的结果。
字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次。例如,"dacb" 是 "abdc" 的一个字母异位词。
示例 1:
输入:words = ["abba","baba","bbaa","cd","cd"]
输出:["abba","cd"]
解释:
获取结果数组的方法之一是执行下述步骤:
- 由于 words[2] = "bbaa" 和 words[1] = " ...
力扣周赛292题解
第一题
力扣原题链接:
2264. 字符串中最大的 3 位相同数字
单个题解:
力扣2264. 字符串中最大的 3 位相同数字
题解:
这题是要找最大的3个相同数并且3个数是相连的,因为数字的话只有0~9这10个数字,找最大的,那我就从999开始,然后依次888、777。。。000,只要字符串中存在,那就是它了。
java代码:
public String largestGoodInteger(String num) {
String str;
for (int i = 9; i >= 0; i--) {
str = "" + i + i + i;
if (num.contains(str)) {
return str;
}
}
return "";
}
第二题
力扣原题链接:
6057. 统计值等于子树平均值的节点数
单个题解:
力扣6057. 统 ...
力扣2267. 检查是否有合法括号字符串路径
力扣周赛292–第四题
2267. 检查是否有合法括号字符串路径
题目
一个括号字符串是一个 非空 且只包含 '(' 和 ')' 的字符串。如果下面 任意 条件为 真 ,那么这个括号字符串就是 合法的 。
字符串是 () 。
字符串可以表示为 AB(A 连接 B),A 和 B 都是合法括号序列。
字符串可以表示为 (A) ,其中 A 是合法括号序列。
给你一个 m x n 的括号网格图矩阵 grid 。网格图中一个 合法括号路径 是满足以下所有条件的一条路径:
路径开始于左上角格子 (0, 0) 。
路径结束于右下角格子 (m - 1, n - 1) 。
路径每次只会向 下 或者向 右 移动。
路径经过的格子组成的括号字符串是 合法 的。
如果网格图中存在一条 合法括号路径 ,请返回 true ,否则返回 false 。
示例 1:
输入:grid = [["(","(","("],[")","(",")"],["(","(",")"],["(","(",")"]]
输出:true ...
力扣2266. 统计打字方案数
力扣周赛292–第三题
2266. 统计打字方案数
题目
Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。
为了 打出 一个字母,Alice 需要 按 对应字母 i 次,i 是该字母在这个按键上所处的位置。
比方说,为了按出字母 's' ,Alice 需要按 '7' 四次。类似的, Alice 需要按 '5' 两次得到字母 'k' 。
注意,数字 '0' 和 '1' 不映射到任何字母,所以 Alice 不 使用它们。
但是,由于传输的错误,Bob 没有收到 Alice 打字的字母信息,反而收到了 按键的字符串信息 。
比方说,Alice 发出的信息为 "bob" ,Bob 将收到字符串 "2266622" 。
给你一个字符串 pressedKeys ,表示 Bob 收到的字符串,请你返回 Alice 总共可能发出多少种文字信息 。
由于答案可能很大,将它对 109 + 7 取余 后返回。
示例 1:
输入:pressedKeys = "22233"
输出:8
解释:
Alice 可能发出的文字信息包 ...
力扣6057. 统计值等于子树平均值的节点数
力扣周赛292–第二题
6057. 统计值等于子树平均值的节点数
题目
给你一棵二叉树的根节点 root ,找出并返回满足要求的节点数,要求节点的值等于其 子树 中值的 平均值 。
注意:
n 个元素的平均值可以由 n 个元素 求和 然后再除以 n ,并 向下舍入 到最近的整数。
root 的 子树 由 root 和它的所有后代组成。
示例 1:
输入:root = [4,8,5,0,1,null,6]
输出:5
解释:
对值为 4 的节点:子树的平均值 (4 + 8 + 5 + 0 + 1 + 6) / 6 = 24 / 6 = 4 。
对值为 5 的节点:子树的平均值 (5 + 6) / 2 = 11 / 2 = 5 。
对值为 0 的节点:子树的平均值 0 / 1 = 0 。
对值为 1 的节点:子树的平均值 1 / 1 = 1 。
对值为 6 的节点:子树的平均值 6 / 1 = 6 。
示例 2:
输入:root = [1]
输出:1
解释:对值为 1 的节点:子树的平均值 1 / ...
力扣2264. 字符串中最大的 3 位相同数字
力扣周赛292–第一题
2264. 字符串中最大的 3 位相同数字
题目
给你一个字符串 num ,表示一个大整数。如果一个整数满足下述所有条件,则认为该整数是一个 优质整数 :
该整数是 num 的一个长度为 3 的 子字符串 。
该整数由唯一一个数字重复 3 次组成。
以字符串形式返回 最大的优质整数 。如果不存在满足要求的整数,则返回一个空字符串 "" 。
注意:
子字符串 是字符串中的一个连续字符序列。
num 或优质整数中可能存在 前导零 。
示例 1:
输入:num = "6777133339"
输出:"777"
解释:num 中存在两个优质整数:"777" 和 "333" 。
"777" 是最大的那个,所以返回 "777" 。
示例 2:
输入:num = "2300019"
输出:"000"
解释:"000" 是唯一一个优质整数。
示例 3:
输入:num = "42352338"
输出:""
解释:不存在长度为 3 且仅由一个唯一数字组成的整数。因此,不存 ...
RKE方式安装k8s集群和Dashboard
前言
需要在电脑上安装好VirtualBox和Vagrant
构建3台虚拟机
1、编写Vagrantfile文件
内容如下:
Vagrant.configure("2") do |config|
config.vm.box_check_update = false
config.vm.provider 'virtualbox' do |vb|
vb.customize [ "guestproperty", "set", :id, "/VirtualBox/GuestAdd/VBoxService/--timesync-set-threshold", 1000 ]
end
$num_instances = 3
# curl https://discovery.etcd.io/new?size=3
(1..$num_instances).each do |i|
...
PhpStorm自动上传修改的内容到服务器
前言
今天,在修改WordPress时,发现利用宝塔的在线编辑好麻烦,找到方法,确无法直接跳过去,于是乎,我把代码下载到本地了,本来想着利用编辑器来修改就可以跳转了,没想到呀,PhpStorm给了我一个大惊喜,原来它只要配置好久可以直接在本地修改,WordPress刷新就可以直接看到效果。
接下来,我就详细的说明一下配置的步骤
配置步骤
1、设置连接
打开File–>Setting
左侧Build,Execution,Deployment–>Deployment,然后右侧加号添加配置选择SFTP
弹出的窗口内输入配置的名称,可随意输入,方便记住就好
点击红框的位置添加ssh连接
在弹出的窗口点击 加号,右边配置
点击OK后,ssh会自动添加上,同时再把IP加入到下面的红框内
2、设置文件映射关系
点击mapping,将服务器上项目的根目录添加到Deployment Path中,如果点击OK
3、设置自动上传
在PhpStorm中依次点击Tool–>Deployment–>Options…
在弹出的窗口中,将红框下拉框设置成第二个,之后只要按Ctr ...
设计模式总结与对比(作业)
1、设计模式的初衷是什么?有哪些设计原则?
开闭原则
依赖倒置原则
单一职责原则
接口隔离原则
迪米特原则
里氏替换原则
合成复用原则
2、列举至少4种单例模式被破坏的场景并给出解决方案
多线程
解决办法:
改写DCL双重锁的写法
使用静态内部类的写法
指令重排
解决办法:加volite关键字
克隆
解决办法:在单例对象中重写clone()方法
反序列化
解决方案:反序列化的时候重新readResolve()方法,将返回值设置为单例对象
反射
解决方法:
在构造方法中检查单例对象,如果已构建则抛出异常
将单例的实现方式改为枚举式单例
3、一句话总结单例模式、原型模式、建造者模式、代理模式、策略模式和责任链模式
单例模式:世界上只有一个Tom
原型模式:拔一根猴毛,吹出千万个
建造者模式:高配中配与低配,相选哪配就哪配
代理模式:没有资源没有时间,得找媒婆来帮忙
策略模式:条条大路通北京,具体哪条你来定
责任链模式:各人自扫门前雪,莫管他人瓦上霜
建造者模式
定义
建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
特征:用户只需指定需要建造的类型就可以获得对象,建造过程及细节不需要了解
属于创建型模式
设计中四个角色
产品(Product):要创建的产品类对象
建造者抽象(Builder):建造者的抽象类,规范产品对象的各个组成部分的构建,一般由子类实现具体的建造过程
建造者(ConcreBuilder):具体的Builder类,根据不同的业务逻辑,具体化对象的各个组成部分的创建
调用者(Director):调用具体的建造者,来创建对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建
适用场景
相同的方法,不同的执行顺序,产生不同的结果时
多个部件或零件,都可以装配到一个对象中,但是产生的结果又不同时
产品类非常复杂,或者产品类中的调用顺序不同产生不同的作用
当初始化一个对象特别复杂,参数多,而且很多参数都具有默认值时
优点
封装性好,创建和使用分离
拓展性好,建造类之间独立、一定程度上解耦
缺点
产生多余的Builder对象
产品内部发生变化,建造者 ...
原型模式
定义
原型模式时指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象,属于创建型模式
应用场景
类初始化消耗资源较多
new产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
构造函数比较复杂
循环体中生成大量对象时
优点
性能优良,Java自带的原型模式是基于内存二进制流的拷贝,比直接new一个对象性能上提升了许多
可以使用深克隆方式保存对象的状态,使用原型模式将对象复制一份并将其状态保存起来,简化了创建过程
缺点
必须配备克隆(或者可拷贝)方法
当对已有类进行改造的时候,需要修改代码,违反了开闭原则。
深拷贝、浅拷贝需要运用得当
克隆破坏单例模式
如果我们克隆的目标对象是单例的对象,深克隆就会破坏单例。
解决办法:可以禁止深克隆。要么你的单例类不实现Cloneable接口;要么我们重写
clone()方法,在clone方法中返回单例对象即可