一、拼写单词(LeetCode-1160

1.1 题目描述

1.2 解题思路

由于给定的chars,每个字母只能用一次,所以用大小为26的数组charsArray来表示a-z(例如charsArray[0]代表字符a可以使用的次数,charsArray[25]代表字符z可以使用的次数),存放某字符的可使用的个数。

遍历单词列表,复制一份charsArray,使用一次,就将单词可使用次数减1。

若需要用到的字符时,该在charsArray的数量为0,则该单词不符合条件

1.3 实现代码


class Solution {
public int countCharacters(String[] words, String chars) {
int[] charLib = new int[26];
int res = 0;
for (Character character : chars.toCharArray()) {
charLib[character - 'a']++;
}
OK:
for (String word : words) {
int len = word.length();
if (len > chars.length()) {
continue;
}
int[] wordLib = Arrays.copyOf(charLib, 26);
for (Character character:word.toCharArray()){
if(--wordLib[character - 'a'] <0){
continue OK;
}
}
res += len;
}
return res;
}
}

二、最大层内元素和(LeetCode-1161

2.1 题目描述

2.2 解题思路

使用BFS完成树的层次遍历,计算层的节点值之和,找到最大的值,返回对应的最小的层数。

2.3 实现代码

public int maxLevelSum(TreeNode root) {
if (root == null) {
throw new IllegalArgumentException("invalid parameters");
} Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
int index = 0;
int sum = 0;
//当队列不是空的时候,将队列头移除,将其儿子节点加入队列
int ceng = 1;
while (!queue.isEmpty()) {
int size = queue.size();//记录当前层节点的个数
TreeNode temp;
int result = 0;
//循环size次
for (int i = 0; i < size; i++) {
temp = queue.poll();
result += temp.val;
if (temp.left != null) {
queue.offer(temp.left);
}
if (temp.right!= null) {
queue.offer(temp.right);
}
}
if (result > sum) {
index = ceng;
sum = result;
}
ceng++;
}
return index;
}

三、地图分析(LeetCode-1162

3.1 题目描述

3.2 解题思路

使用BFS的思想解决

  1. 先找到所有陆地的坐标,放到队列
  2. 从队列中取出陆地坐标,找到离陆地最近的海洋
  3. 若找到海洋,则层数level加1,找到的海洋都当陆地算,海洋的坐标值grid[i][j]变为1,重新放到队列,重复2操作
  4. 若未找到任何海洋,则结束,返回level

3.3 实现代码


public class Solution { class Position {
public int x;
public int y; public Position(int x, int y) {
this.x = x;
this.y = y;
}
} public int maxDistance(int[][] grid) {
int[] direction = {0, 1, 0, -1, 0};
int N = grid.length;
int res = 0;
Queue<Position> queue = new ArrayDeque<>();
//找到陆地
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
if (grid[i][j] == 1) {
queue.offer(new Position(i, j));
}
}
}
//全是海洋或陆地
if (queue.size() == N * N || queue.isEmpty()) {
return -1;
}
//使用BFS
while (!queue.isEmpty()) {
int size = queue.size();
int r = 0;
while (size != 0) {
Position position = queue.poll();
for (int i = 0; i < direction.length-1; i++) {
int nx = position.x + direction[i];
int ny = position.y + direction[i + 1];
if (nx < 0 || ny < 0 || nx >= N || ny >= N || grid[nx][ny] == 1) {
continue;
}
//将找到的海洋当做陆地,放到队列中
grid[nx][ny] = 1;
queue.offer(new Position(nx, ny));
r++;
}
size--;
}
//当前层的陆地能找到距离最近的海洋,则结果值+1
if(r > 0){
res++;
}
}
return res;
} }

四、按字典序排在最后的子串(LeetCode-1163

4.1 题目描述

4.2 解题思路

根据题意。

截取的字符串,只需要选择一个位置k,截取k及之后的字符串即为最终答案(res = s.subString(k))

如何找到这个k?

例如zzaazcc,按照字典排序,肯定是要找到最大的字符z

存在两种情况:

  • 只有一个最大字符z,返回z及之后的所有字符,作为答案
  • 有多个最大字符z,例如存在2个最大字符z,对应的位置分别是x,y,则比较最大字符后面的第一位字符,即比较charArray[x+1]、charArray[y+1],根据k新的位置。

需要考虑一种特殊情况即,两个最大字符是邻位(zz),出现这种情况,我们只取index最小的(zz取前面的z的坐标)。通过charArray[i] != charArray[i-1],来排除。

4.3 实现代码

public class Solution {

    public String lastSubstring(String s) {
//应该截取的字符串的起始位置res = k
int k = 0;
char[] charArray = s.toCharArray();
int len = charArray.length;
//找到最大字符首先出现位置k
for (int i = 1; i < len; i++) {
if (charArray[i] > charArray[k]) {
k = i;
}
}
//从k开始找到与k相等的字符,比较字符所在位置之后的第一个字符大小
for (int i = k + 1; i < len; i++) {
//考虑 zaazzcc的情况,两个相同字符串z出现,取index最小
if (charArray[i] == charArray[k] && charArray[i] != charArray[i - 1]) {
for (int j = 1; k + j < i && i+j < len; j++) {
if (charArray[k + j] < charArray[i + j]) {
k = i;
break;
}
if (charArray[k + j] > charArray[i + j]) {
break;
}
}
}
}
return s.substring(k);
} public static void main(String[] args) {
String str = "zzaazcc";
str = "abab";
str = "leetcode";
Solution solution = new Solution();
String res = solution.lastSubstring(str);
System.out.println(res);
} }

LeetCode 第 150 场周赛的更多相关文章

  1. LeetCode 第 165 场周赛

    LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...

  2. Leetcode第 217 场周赛(思维量比较大)

    Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...

  3. Leetcode 第133场周赛解题报告

    今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...

  4. LeetCode第151场周赛(Java)

    这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...

  5. LeetCode第152场周赛(Java)

    这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...

  6. LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)

    5452. 判断能否形成等差数列   给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...

  7. Leetcode 第137场周赛解题报告

    今天的比赛的题目相对来说比较「直白」,不像前几周都是一些特定的算法,如果你没学过不可能想出来. 做了这些周,对leetcode比赛的题目也发现了一些「规律」. 一般前两道题都很「简单」,只要有想法,直 ...

  8. 【LeetCode第 313 场周赛】忘光光

    比赛链接 最近不怎么打比赛,不能马上反应过来考察的是什么,全部忘光光了... 6192. 公因子的数目 题意: 给定 \(a\) 和 \(b\),问两者的公因子数量 数据范围:\(1\leq a,b\ ...

  9. Leetcode 第136场周赛解题报告

    周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...

随机推荐

  1. php json_encode()函数返回对象和数组问题

    php json_encode() 函数格式化数据时会根据不同的数组类型格式化不同类型的json数据 索引数组时 <?php $arr = [1,2,3,4,5]; print_r(json_e ...

  2. React Native 开发豆瓣评分(一)环境搭建&配置模拟器

    详细可参考 官方文档,这里进记录一些重要过程. 安装环境 下载 Android Studio 选择 Custom 进行安装: Android SDK Android SDK Platform Perf ...

  3. How to change SAPABAP1 schema password In HANA

    Symptom How to change SAPABAP1 schema password Environment HANA 1.x HANA 2.x Resolution Shutdown the ...

  4. [LeetCode] 137. 只出现一次的数字,其余三次 II ☆☆☆

    描述 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素. 说明: 你的算法应该具有线性时间复杂度. 你可以不使用额外空间来实现吗? 示例 1: 输 ...

  5. AJAX中错误代码解释以及http中的错误代码解释

    xmlhttp.readyState的值及含义: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()). 2:请求已发送,正在处理中(通常现在可 ...

  6. DB2新建编目及删除编目

    场景:在添加一个新数据库的连接时,需要先建立此数据库的编目信息 新建: 1.获取数据库IP.端口.数据库名称 2.打开DB2客户端的“DB2命令窗口” 3.按以下命令执行 db2 catalog tc ...

  7. 软件测试_Loadrunner_性能测试_脚本优化_关联_手动关联

    在写文章之前写一下自己的心路历程,录制脚本主要是上传图片并返回查询结果的过程.录制完脚本后发现函数中URl地址中有图片ID后台随机生成的32位随机数,并且每次上传图片id都会变化.我就上网搜索了一些解 ...

  8. AlexNet网络的Pytorch实现

    1.文章原文地址 ImageNet Classification with Deep Convolutional Neural Networks 2.文章摘要 我们训练了一个大型的深度卷积神经网络用于 ...

  9. 配置Cisco网络设备

    了解就行,不用记 电脑管理路由器软件   路由器显示命令: router#show run :显示配置信息 router#show interface :显示接口信息 router#show ip r ...

  10. 进程间的通信----队列queue

    import multiprocessing def download_from_web(q): """下载数据""" # 模拟下载数据 d ...