LeetCode 第 159 场周赛
一、 缀点成线(LeetCode-5230)
1.1 题目描述

1.2 解题思路
比较简单的一题,利用公式 y = kx + b,确定好k和b就好,并且要考虑一种情况,函数 x = h。
1.3 解题代码
public boolean checkStraightLine(int[][] coordinates) {
int k = Integer.MIN_VALUE;
int x1 = coordinates[0][0];
int y1 = coordinates[0][1];
int x2 = coordinates[1][0];
int y2 = coordinates[1][1];
int dy = y2 - y1;
int dx = x2 - x1;
if (dx != 0) {
k = dy / dx;
}
int b = y1 - k * x1;
boolean onLine = true;
for (int i = 2; i < coordinates.length; i++) {
if (k == Integer.MIN_VALUE) {
if (coordinates[i][0] != x1) {
onLine = false;
break;
}
} else if (coordinates[i][1] != (k * (coordinates[i][0]) + b)) {
onLine = false;
break;
}
}
return onLine;
}
二、 删除子文件夹(LeetCode-5231)
2.1 题目描述


2.2 解题思路
使用两层for循环会导致超时,需要使用字典树解决。
2.3 解题代码
class Solution {
public Tree rootNode = null;
public List<String> removeSubfolders(String[] folder) {
rootNode = new Tree();
rootNode.path = "/";
rootNode.nextMap = new HashMap<>();
List<String> res = new ArrayList<>();
Arrays.sort(folder, (a, b) -> {
return a.length() - b.length();
});
for (int i = 0; i < folder.length; i++) {
if (!isCover(folder[i])) {
res.add(folder[i]);
}
}
return res;
}
public boolean isCover(String path) {
boolean cover = false;
String[] pathArray = path.split("/");
int arrayLen = pathArray.length;
Tree tmp = rootNode;
for (int i = 1; i < arrayLen; i++) {
Tree node = tmp.nextMap.get(pathArray[i]);
if (node == null) {
node = new Tree();
node.path = pathArray[i];
node.nextMap = new HashMap<>();
} else {
if (node.isRoot) {
cover = true;
}
}
if (cover == false && i == arrayLen - 1) {
node.isRoot = true;
}
tmp.nextMap.put(pathArray[i], node);
tmp = node;
}
return cover;
}
}
class Tree {
public String path;
//判断是否是根文件夹
//例如 /a/b 可能是根文件夹,需要在b节点,记录isRoot = true;
public boolean isRoot;
public Map<String, Tree> nextMap;
}
LeetCode 第 159 场周赛的更多相关文章
- LeetCode 第 165 场周赛
LeetCode 第 165 场周赛 5275. 找出井字棋的获胜者 5276. 不浪费原料的汉堡制作方案 5277. 统计全为 1 的正方形子矩阵 5278. 分割回文串 III C 暴力做的,只能 ...
- Leetcode第 217 场周赛(思维量比较大)
Leetcode第 217 场周赛 比赛链接:点这里 做完前两题我就知道今天的竞赛我已经结束了 这场比赛思维量还是比较大的. 1673. 找出最具竞争力的子序列 题目 给你一个整数数组 nums 和一 ...
- Leetcode 第133场周赛解题报告
今天参加了leetcode的周赛,算法比赛,要求速度比较快.有思路就立马启动,不会纠结是否有更好的方法或代码可读性.只要在算法复杂度数量级内,基本上是怎么实现快速就怎么来了. 比赛时先看的第二题,一看 ...
- LeetCode第151场周赛(Java)
这是我第一次写周赛的题目,而且还是虚拟的.从这次起,以后就将所有错过的题目都写到博客来.当然既然是我错的,那代码肯定不是我自己的.我会注明来源.并且我会自己敲一遍.多总结总是没坏处的. 另外比较糟糕的 ...
- LeetCode第152场周赛(Java)
这算是我第一次正式参加 LeetCode 的周赛吧.通过两道题.意料之中(通过上次模拟可以看出来).总的来说,脑袋还是不太灵光.想的有点慢.全球第一名 0:10:19 就全部通过...感觉我的智商被狠 ...
- Leetcode 第137场周赛解题报告
今天的比赛的题目相对来说比较「直白」,不像前几周都是一些特定的算法,如果你没学过不可能想出来. 做了这些周,对leetcode比赛的题目也发现了一些「规律」. 一般前两道题都很「简单」,只要有想法,直 ...
- LeetCode 第 150 场周赛
一.拼写单词(LeetCode-1160) 1.1 题目描述 1.2 解题思路 由于给定的chars,每个字母只能用一次,所以用大小为26的数组charsArray来表示a-z(例如charsArra ...
- LeetCode 第 196 场周赛 (题目:5452-5455,这是参加过最坑的周赛,暴力n^2居然可以过)
5452. 判断能否形成等差数列 给你一个数字数组 arr . 如果一个数列中,任意相邻两项的差总等于同一个常数,那么这个数列就称为 等差数列 . 如果可以重新排列数组形成等差数列,请返回 tru ...
- Leetcode 第136场周赛解题报告
周日的比赛的时候正在外面办事,没有参加.赛后看了下题目,几道题除了表面要考的内容,还是有些能发散扩展的地方. 做题目不是最终目的,通过做题发现知识盲区,去研究学习,才能不断提高. 理论和实际是有关系的 ...
随机推荐
- js 算法,判断一个数组中的数字出现多少次
let arr = [11, 11, 2, 2, 5, 5, 5, 5, 3]; //创建一个map,把每个数字和其个数相对应 let countObj = {}; for (i = 0; i < ...
- js实现图片上传本地预览
演示地址:https://xibushijie.github.io/static/uploadImg.html <!DOCTYPE> <html> <head> & ...
- SAP云平台CloudFoundry环境里route 超过quota的错误处理
试图往SAP Cloud Platform CloudFoundry用命令行CLI部署应用时,遇到如下错误: 原因是因为这个新建的名为Haytham的subaccount没有分配application ...
- IObit Driver Booster 无法更新驱动的解决办法
IObit Driver Booster 无法更新驱动的解决办法:依次打开软件中的 菜单-设置-网络-自定义代理设置-主机:填入210.101.131.231 端口:8080 最后点确定完成. 注意! ...
- @JsonIgnore注解
注解名称:@JsonIgnore 作用:在实体类向前台返回数据时用来忽略不想传递给前台的属性或接口. Eg:User实体中会有字段password字段,当返回用户信息给前台的时候,当然是不希望将pas ...
- 解决spring boot1.5以上版本@ConfigurationProperties提示“Spring Boot Configuration Annotation Processor not.."
Springboot1.5以上版本,在使用 @ConfigurationProperties注解的时候会提示“Spring Boot Configuration Annotation Processo ...
- IDEA 显示Run Dashboard窗口的2种方式
前言:在基于spring boot构建spring cloud微服务架构的时候,一般需要启动多个应用程序,在idea开发工具中,多个同时启动的应用可以在Run Dashboard运行仪表盘中得到更好的 ...
- Linux命令——e2fsck
简介 e2fsck字面意义上理解时,Ext2 FileSystem Check,但他实际上不仅仅对Ext2有用,对Ext家族都有用,即Ext2/3/4d都也可以使用. 5 UNIX / Linux e ...
- Java中创建线程主要有三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- Java中处理接口返回base64编码的图片数据
在做接口测试的时候,某些接口返回的content是一大段加密文字.这种情况下,有可能是返回的图片加密数据,需要将这些数据转换成图片进行保存查看. 例如: 这里,可以看到Content对应的键值开头有“ ...