ARTS第五周
-第五周。这两周在复习大学里的课程,发现当时觉得课上很多看不懂的,现在看起来轻松多了,也带来了新的感悟。
1.Algorithm:每周至少做一个 leetcode 的算法题
2.Review:阅读并点评至少一篇英文技术文章
3.Tip:学习至少一个技术技巧
4.Share:分享一篇有观点和思考的技术文章
以下是各项的情况:
Algorithm
链接:[LeetCode-14]-Longest Common Prefix
题型都有大概的套路的
- 非空判断
- 数组里面只有一个元素的判断
- 其它情况的判断
所以先判空,再想其他问题
思路:
1. 找出minString
2. 排除特殊情况:
1)字符串数组为空,返回 null
2)字符串数组长度为1,直接返回 strs[0]
3)字符串数组中存在空字符串 返回 null
4)数组中存在一个单词的首字母与其他单词的首字母不同,返回 null
3. 双层for循环找出 最长公共前缀
4. 注意,在内层for循环比较之前,可以再排除一种情况:如果strs[i] 与 minString 值相同,则不执行内层循环。以减少代码运行时间。
class Solution {
public String longestCommonPrefix(String[] strs) {
// 1. 判空 2.查找Str中最短长短,做判断边界 3.返回相同的公共头部
if (strs.length == 0) return "";
if (strs.length == 1) return strs[0];
// 最短长先暂设第一个
int min = strs[0].length() ;
// 判断最短长
for(String s : strs)
{
min = Math.min(min, s.length());
}
// 先暂定数组第一个是最短的
String minstr = strs[0];
// 先判断头是否相等,都不等排除 节省时间
// 再使用
for(int i=0;i <= strs.length ;i++ )
{
if(strs[0].charAt(0) != strs[i].charAt(0))
{
return "";
}
/*if (strs[i].length() < min)
{
minstr = strs[i];
}*/
}
for (int i = 0; i < strs.length; i++)
{
if (minstr.equals(strs[i]))
{
continue;
}
for (int j = min-1; j > 0 ; j--)
{
if (minstr.charAt(j) != strs[i].charAt(j))
{
minstr = minstr.substring(0, j);
}
}
}
return minstr;
}
}
public class MainClass {
public static String[] stringToStringArray(String line) {
JsonArray jsonArray = JsonArray.readFrom(line);
String[] arr = new String[jsonArray.size()];
for (int i = 0; i < arr.length; i++) {
arr[i] = jsonArray.get(i).asString();
}
return arr;
}
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = in.readLine()) != null) {
String[] strs = stringToStringArray(line);
String ret = new Solution().longestCommonPrefix(strs);
String out = (ret);
System.out.print(out);
}
}
}
submit后提示出现 :
java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at line 658, java.lang.String.charAt at line 73, Solution.longestCommonPrefix at line 163, MainClass.main
怎么出现了越界问题 ? 这可怎么搞 。。感觉除了写的繁琐了点,没看出问题。 在 tips 里是否能独立解决掉
Review
这篇不错,把不需要的点列出来,主旨就是开发人员 git commit信息不要写的过多过杂 ,省的其他人产生混乱 。觉得很有用
Tip
https://coderanch.com/t/658095/java/Correct-java-lang-StringIndexOutOfBoundsException-String
索引号小于长度的问题,那么我原先的代码有什么问题呢 ? 我暂时还得再想想 ,我先这样修改就能提交了
class Solution {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
if (strs.length == 1) {
return strs[0];
}
String min = strs[0] ;
for (int i = 0; i < strs.length; i++) {
if (strs[i].isEmpty()) {
return "";
}
if (strs[0].charAt(0) != strs[i].charAt(0)) {
return "";
}
if (strs[i].length() <= min.length()) {
min = strs[i];
}
}
for (int i = 0; i < strs.length; i++) {
if (min.equals(strs[i])) {
continue;
}
for (int j = min.length()-1; j > 0 ; j--) {
if (min.charAt(j) != strs[i].charAt(j)) {
min = min.substring(0, j);
}
}
}
return min;
}
}
Share
https://www.javaworld.com/article/3341388/jdk-13-the-new-features-coming-to-java-13.html
JDK13 的新功能 :
增强 ZGC(Z垃圾收集器) 以将未使用的内存返回到操作系统,引用的提议被集成到JDK 13中.ZGC被称为可扩展的低延迟收集器,目前不会将未使用的内存返回到操作系统即使长时间没有使用内存。对于某些应用程序和环境而言,此行为并非最佳,尤其是那些需要关注内存占用的应用程序和环境,例如应用程序可能长时间处于空闲状态并与其他应用程序共享或竞争资源的容器或环境 。。。 ,不过好像没有重大规则更改?
switch 更灵活了 , 将switch表达式看作一种多路条件运算符(?:) 应该是这个意思 ??
ARTS第五周的更多相关文章
- 20145213《Java程序设计》第五周学习总结补充
20145213<Java程序设计>第五周学习总结补充 教材学习内容总结 欠的账都是要还的!第九章的内容躲过对酒当歌的夜,躲不过四下无人的街.由于第五周贪玩,疏忽冷落了Collection ...
- 20145213《Java程序设计》第五周学习总结
20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...
- 20145304 第五周Java学习报告
20145304<Java程序设计>第5周学习总结 教材学习内容总结 1.使用try.catch: 如果使用了try.catch,编译时会尝试执行try区块中的程序代码,如果有错误,执行流 ...
- 20145330第五周《Java学习笔记》
20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...
- 20145337 《Java程序设计》第五周学习总结
20145337 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 JAVA中的所有错误都会被包装成对象,如果你愿意,可以尝试执行并捕捉代表错误的对象后做一些处理.使用了try ...
- Linux内核设计第五周——扒开系统调用三层皮(下)
Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加 ...
- 项目评价及第五周PSP的发布
5TH 各组作品ALPHA发布体会 1:俄罗斯方块组做了主要功能,这个项目我自己原来拿c语言做过一部分,感觉此游戏细节特别多,逻辑思维需要组织,以为我的水准来说,感觉做的挺好的. ...
- 20145218 《Java程序设计》第五周学习总结
20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...
- 《Java程序设计》第五周学习总结
20145224 <Java程序设计>第五周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...
随机推荐
- 灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置
灵动微电子ARM Cortex M0 MM32F0010 Timer定时器中断定时功能的配置 目录: 1.Timer1高级定时器Timer3通用定时器Timer14基本定时器简介 2.Timer1高级 ...
- HTTP状态 500 - 内部服务器错误之Could not open ServletContext resource [/db.properties]或者 [/mybatis.xml]
报错原因是因为找不到db.properties或者mybatis.xml,但是我明明写了有.找了一下,才发现spring-dao.xml里面这两个配置文件地址有问题 Maven项目,applicati ...
- 解决Caused by: org.apache.ibatis.exceptions.PersistenceException:
在mybatis-config核心配置文件中注册了xml以后出现了新的异常错误 Caused by: java.io.IOException: Could not find resource cn.d ...
- nginx 的访问日志切割
1. 高级用法–使用 nginx 本身来实现 当 nginx 在容器里,把 nginx 日志挂载出来的时候,我们发现就不适合再使用 kill -USR1 的方式去分割日志这时候当然就需要从 nginx ...
- 关于LSTM核心思想的部分理解
具体资料可以查阅网上,这里提到一些难理解的点.别人讲过的知识点我就不重复了. LSTM 的关键就是细胞状态,按照水平线从左向右运行,如同履带,在整个链上运行. 根据时间t-1,t,t+1,我们可以看出 ...
- 如何使用Intel vtune profilier?
如何使用Intel vtune profilier?
- QT基本数据类型
因为Qt是一个C++框架, 因此C++中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数类型. QT基本数据类型定义在#inclu ...
- 【SQLite】教程05-SQLite创建数据库、附加、分离数据库
创建数据库 .quit命令 退出sqlite 提示符 .quit .dump 命令 使用 SQLite .dump 点命令来导出完整的数据库在一个文本文件中,如下所示: sqlite3 Test.db ...
- 一文带你走遍Git世界,教会你Git的使用
@ 目录 这篇文章教会Git 1. Git是什么? 1.1 发展历程 1.2 Git是什么? 1.3 Git和SVN 2.Git有什么用? 2.1 代码合并 2.2 代码备份 2.3 代码还原 2.4 ...
- 玩转STM32MP157- 使用fbtft驱动 lcd st7735r
什么是fbtft fbtft 在 github 中的介绍是" Linux Framebuffer drivers for small TFT LCD display modules,翻译过来 ...