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

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. 使用Git下载指定分支命令为

    使用Git下载指定分支命令为: git clone -b 分支名 仓库地址   例如: git clone -b dev https://github.com/xxx.git   将下载分支名为2D- ...

  2. 对标 Spring Boot & Cloud ,轻量框架 Solon 1.4.12 发布

    Solon 是一个轻量的Java基础开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Job.Micro service.WebS ...

  3. Ubuntu 20.04 Docker 安装并配置

    前言 Docker 的使用能极大地方便我们的开发,减少环境搭建,依赖安装等繁琐且容易出错的问题. 安装 Docker Ubuntu 20.04 官方 apt 源中就有 Docker,我们可以直接通过 ...

  4. FFmpeg扩展开发

    FFmpeg扩展开发 对FFmpeg RTMP/FLV部分做了扩展,用于支持H.265. 针对<video_file_format_spec_v10_1> VIDEODATA部分扩展如下: ...

  5. 基于TensorRT的BERT实时自然语言理解(上)

    基于TensorRT的BERT实时自然语言理解(上) 大规模语言模型(LSLMs)如BERT.GPT-2和XL-Net为许多自然语言理解(NLU)任务带来了最先进的精准飞跃.自2018年10月发布以来 ...

  6. h265player开发

    h265player开发 https://github.com/goldvideo/h265player 简介 随着视频编码技术的发展,相比H.264, H.265同等画质体积仅为一半.带宽占用省一半 ...

  7. 我进金山wps啦!

    成功进入金山wps暑期精英训练营,希望能够学到很多知识,写这篇文章纪念一下

  8. 一文彻底理解Apache Hudi的多版本清理服务

    Apache Hudi提供了MVCC并发模型,保证写入端和读取端之间快照级别隔离.在本篇博客中我们将介绍如何配置来管理多个文件版本,此外还将讨论用户可使用的清理机制,以了解如何维护所需数量的旧文件版本 ...

  9. 【NX二次开发】创建有界平面UF_MODL_create_bplane

    先准备几条曲线如下图所示,我们用这几条线来创建一个有界平面: 效果:  源码: //有界平面 extern DllExport void ufusr(char *param, int *returnC ...

  10. 可微渲染 SoftRas 实践

    SoftRas 是目前主流三角网格可微渲染器之一. 可微渲染通过计算渲染过程的导数,使得从单张图片学习三维结构逐渐成为现实.可微渲染目前被广泛地应用于三维重建,特别是人体重建.人脸重建和三维属性估计等 ...