美文网首页
ARTS-W03(1.03 - 1.09)

ARTS-W03(1.03 - 1.09)

作者: 寒沁 | 来源:发表于2021-01-12 09:45 被阅读0次

Algorithm(一道算法题)

验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:本题中,我们将空字符串定义为有效的回文串。
示例 1:
输入: "A man, a plan, a canal: Panama"
输出: true
示例 2:
输入: "race a car"
输出: false

认真阅读题目(快速理解题目也是一种能力),很快知道,除去字符串和数字作为回文串,其他的都可以忽略,从左往右与从右到左读取到的字符串是一样的。

第一版本思路如下:将字符串转化成char串,遍历char[ ],筛选出字母和数字,并将字母统一转化成大写(小写),遍历的时候同时用StringBuffer拼接成str1及放入栈中,之后再遍历一遍栈,拼接成str2,比较str1与str2是否一致。

代码如下

    public static boolean isPalinerome2(String str){
        if(str.isEmpty()){
            return true;
        }
        char[] chars = str.toCharArray();
        Stack<String> stack1 = new Stack<>();
        StringBuffer s1 = new StringBuffer();
        StringBuffer s2 = new StringBuffer();

        for(char c : chars){
            int asc_value = Integer.valueOf(c);
            if( (asc_value >= 48 && asc_value <= 57) || (asc_value >= 65 && asc_value <= 90) ||
                (asc_value >= 97 && asc_value <= 122)){
                if(asc_value >= 65 && asc_value <= 90){
                    asc_value = asc_value+32 ;
                }
                stack1.push((char)asc_value+"");
                s1.append((char)asc_value+"");
            }
        }

        while(!stack1.empty()){
            s2.append(stack1.pop());
        }

        if(s1.toString().equals(s2.toString())){
            return true;
        }

        return false;
   }

结果运行下来,执行耗时与空间内存用的都很高。这种写法能想到的优化点,就是大小写转化这一块,可以用上二进制的形式来做。jdk中提供了两个api

  • StringBuffer.reverse 翻转StringBuffer值
  • isLetterOrDigit(char a) 判断是否是数字或者字母

它的实现比以上的代码实现效率要高很多。
第二版的思路:双指针,1个从头位置,1个从尾位置,相向移动,都遇到数字和字母比较,则比较是否相等,相等继续移动,最后判断两指针是否相遇,能相遇说明是回文。

代码如下

public static boolean isPalindromeTwo_1(String s){
        int left = 0;
        int right = s.length()-1;

        while(left < right){
            if(!Character.isLetterOrDigit(s.charAt(left)) || !Character.isLetterOrDigit(s.charAt(right))){
                if(!Character.isLetterOrDigit(s.charAt(left))){
                    left++;
                }
                if(!Character.isLetterOrDigit(s.charAt(right))){
                    right--;
                }
                continue;
            }

            if(Character.toLowerCase(s.charAt(left)) != Character.toLowerCase(s.charAt(right))){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

以上方法,不管空间还是时间利用率都要优于方法一

Review(阅读并点评一篇英语技术文章)

How is the Apple M1 going to affect Machine Learning?

  • Introduction 大致介绍了苹果自研台式和笔记本等pc机器的cpu , M1芯片,并且已经在三款机器上使用,很多方面都取得了好几倍的效果,它着重强调了续航能力。
  • M1 Architecture M1架构最突出的点:“Since the RAM is built into the processor, all components access the same memory” (\color {red}{RAM内置在处理器内部,所有组件都能访问同一内存}
  • CPU单核效率远高于Inter与AMD,单核性能最好的cpu
  • Neural Engine 集成在处理器中的神经引擎,神经引擎之前只集成在iphone、ipad等A系列处理器中。
  • M1的软件支持
    Tensorflow:端到端的开源机器学习平台
    Scikit-Learn:python的机器学习

Tips(学习一个技术技巧)

今天分享一个小技巧:mac下面idea项目启动慢的解决方法
第一次使用macbook开发,在idea项目启动的时候,在build阶段,都会卡住好久,启动过程也非常的慢,碰到这种情况如何解决呢?

  1. 找到mac的电脑上名称
    系统偏好设置 --> 共享 --> 您的本地网络上的电脑可以通过以下地址访问您的电脑:xxx
  2. 通过终端,修改主机地址 sudo vim /etc/hosts 0
    127.0.0.1 localhost xxx

重新启动即可。

Share(分享一篇有观点有思考的技术文章)

  一路走来,做java也已经很多年了,提升有限,还是个菜鸡。原因很多,其中一个关键的原因就是想学的太多,太杂,都是浅尝而止。很多时候都是在同时做N件事情,做的事情又以完成为主,而“完成”通常都带有点水货,思考与摘抄参半,没有形成一个闭环。
  比如这次的文章,有不少是为了赶进度,为了完成而完成。Share原计划是写最近看同事写的责任链落地代码带有益处的思考,然而周末花时间在看《大秦赋》上,又不了了之了。
   在这里特别标注提醒下自己,花了时间的事情,要尽可能从中获取到益处,不能为了做而做。慢点没关系,简单点没关系,最重要的是做完之后,要有收获。或是思考过程,或是总结提炼,或是认真投入。

相关文章

  • ARTS-W03(1.03 - 1.09)

    Algorithm(一道算法题) 验证回文串[https://leetcode-cn.com/problems/v...

  • 2022第1周总结(1.03~1.09)

    2022的第一周,大部分时间还是宅在家中,除了每天要去街上拿一拿快递,基本上就没有怎么出去过。但是学习情况却没有进...

  • 1.09

    每个人都有自己的小算盘,无外乎有的打得响,有的打得弱。每份工作说得高大上点是为了集体,其实都是为了自己的回报。但回...

  • 1.09

    列夫还是超出了我的预料,他还渣的不够彻底,他真的攒够了让哥哥一家移民美国的钞票,虽然离他入赘豪门已经好几年的时间。...

  • 1.03

    0.97 晚上去跑步,差不多四公里,整个人都虚的不行,汗流浃背。大学时候在球队训练时,25分内跑完五公里热身,仿佛...

  • 1.03

    每天晚上我都想成为一个创作者,可是一觉醒来就什么都忘了,连着这个想法。

  • 2018-06-10

    平板1.03

  • 2023/02/21 最新贝价

    今日简书贝均价为0.093,比昨日上涨0.001,涨跌幅为1.09%。 近一周涨跌幅为1.09%,近...

  • 1.03总结

    1 今天不应该说狠话。 2 对事没用的情绪和行为请你以后少做 不应该跟同事透漏自己的心声不要逢人透露自己的想法,没...

  • 12.28—1.03

    1、体重:目标55Kg。 2、冥想:每天冥想15分钟。 3 、早睡:晚上10:30前睡觉。 健康:身心完美的健康 ...

网友评论

      本文标题:ARTS-W03(1.03 - 1.09)

      本文链接:https://www.haomeiwen.com/subject/ugwuoktx.html