-第五周。这两周在复习大学里的课程,发现当时觉得课上很多看不懂的,现在看起来轻松多了,也带来了新的感悟。

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 提交 信息要避免的问题

这篇不错,把不需要的点列出来,主旨就是开发人员 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表达式看作一种多路条件运算符(?:)  应该是这个意思 ??

https://www.javaworld.com/article/2941281/java-101-deciding-and-iterating-with-java-statements.html?page=1

ARTS第五周的更多相关文章

  1. 20145213《Java程序设计》第五周学习总结补充

    20145213<Java程序设计>第五周学习总结补充 教材学习内容总结 欠的账都是要还的!第九章的内容躲过对酒当歌的夜,躲不过四下无人的街.由于第五周贪玩,疏忽冷落了Collection ...

  2. 20145213《Java程序设计》第五周学习总结

    20145213<Java程序设计>第五周学习总结 教材学习内容总结 "素衣莫起风尘叹,犹及清明可到家."每每念此,不得不心疼自己.古人清明长假都进城耍了,还担心自己清 ...

  3. 20145304 第五周Java学习报告

    20145304<Java程序设计>第5周学习总结 教材学习内容总结 1.使用try.catch: 如果使用了try.catch,编译时会尝试执行try区块中的程序代码,如果有错误,执行流 ...

  4. 20145330第五周《Java学习笔记》

    20145330第五周<Java学习笔记> 这一周又是紧张的一周. 语法与继承架构 Java中所有错误都会打包为对象可以尝试try.catch代表错误的对象后做一些处理. 使用try.ca ...

  5. 20145337 《Java程序设计》第五周学习总结

    20145337 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 JAVA中的所有错误都会被包装成对象,如果你愿意,可以尝试执行并捕捉代表错误的对象后做一些处理.使用了try ...

  6. Linux内核设计第五周——扒开系统调用三层皮(下)

    Linux内核设计第五周 ——扒开系统调用三层皮(下) 一.知识点总结 1.给MenuOS增加新的命令的步骤 更新menu代码到最新版 test.c中main函数里,增加MenuConfig() 增加 ...

  7. 项目评价及第五周PSP的发布

         5TH 各组作品ALPHA发布体会       1:俄罗斯方块组做了主要功能,这个项目我自己原来拿c语言做过一部分,感觉此游戏细节特别多,逻辑思维需要组织,以为我的水准来说,感觉做的挺好的. ...

  8. 20145218 《Java程序设计》第五周学习总结

    20145218 <Java程序设计>第五周学习总结 教材学习内容总结 异常 程序中总有些意想不到的状况所引发的错误,如果不对异常进行正确的处理,则可能导致程序的中断执行,造成不必要的损失 ...

  9. 《Java程序设计》第五周学习总结

    20145224 <Java程序设计>第五周学习总结 教材学习内容总结 第八章异常处理 8.1.1使用try.catch ·教材范例用户连续输入整数,输入0结束后显示输入数的平均值(代码如 ...

随机推荐

  1. Socks协议以及代理转发工具分析

    前言:最近两场HW都和某师傅学到了挺多东西,算是对内网不出网以及流量代理做个分析(SOCKS协议,reGeorg原理分析,frp的代理,CS上的代理 SOCKS SOCKS(Socks:Protoco ...

  2. CUDA数学库

    CUDA数学库 高性能数学例程 CUDA数学库是经过行业验证的,高度准确的标准数学函数的集合.只需在源代码中添加" #include math.h",即可用于任何CUDA C或CU ...

  3. 深度学习LiDAR定位:L3-Net

    深度学习LiDAR定位:L3-Net 摘要 本文提出L3-Net--一种新颖的基于学习的LiDAR定位系统,可实现厘米级的定位,与现有最高水平的传统定位算法相媲美.与传统定位算法不同,本文创新地实现了 ...

  4. HiCar技术概述

    HiCar技术概述 HUAWEI HiCar(以下简称 HiCar)是华为提供的人-车-家全场景智慧互联(HUAWEI HiCar Smart Connection)解决方案,具备如下特点: 安全交互 ...

  5. 向量算子优化Vector Operation Optimization

    向量算子优化Vector Operation Optimization 查看MATLAB命令View MATLAB Command 示例显示Simulink编码器 ,将生成向量的块输出,设置为标量,优 ...

  6. 代码生成codegen

    代码生成codegen 该模块提供了从SymPy表达式生成直接可编译代码的功能.该codegen功能是SymPy中代码生成功能的用户界面.下面为可能希望直接使用框架的高级用户提供了一些实现细节. 注意 ...

  7. SOC,System on-a-Chip技术初步

    SOC,System on-a-Chip技术初步 S O C(拼作S-O-C)是一种集成电路,它包含了电子系统在单个芯片上所需的所有电路和组件.它可以与传统的计算机系统形成对比,后者由许多不同的组件组 ...

  8. H265与ffmpeg改进开发

    H265与ffmpeg改进开发 1. Introduction KSC265是集编码.解码于一体的H.265编解码软件,完全遵循H.265协议标准.符合H.265编码规范的视频都可以通过KSC265进 ...

  9. Spring4

    Spring javaEE开发一站式框架 web层:SpringMVC Service层:Spring的Bean管理(IoC).Spring声明式事务 Dao层:Spring的jdbc模板.Sprin ...

  10. 《吃透MQ系列》之扒开Kafka的神秘面纱

    大家好,这是<吃透 MQ 系列>的第二弹,有些珊珊来迟,后台被好几个读者催更了,实属抱歉! 这篇文章拖更了好几周,起初的想法是:围绕每一个具体的消息中间件,不仅要写透,而且要控制好篇幅,写 ...