美文网首页
每周 ARTS 第 26 期

每周 ARTS 第 26 期

作者: 落英坠露 | 来源:发表于2020-04-19 22:05 被阅读0次

1. Algorithm

判定字符是否唯一(简单)

描述:

实现一个算法,确定一个字符串 s 的所有字符是否全都不同。

示例:
输入: s = "leetcode"
输出: false 
输入: s = "abc"
输出: true
思路:
  • 统计次数:使用一个额外的 int 数组,统计每个字符出现的次数。
  • 位运算:int 类型有 32 位,取其中的低 26 位,作为每个字符的标志位,通过左移、与、或运算,记录每个字符的对应位置。真是高级解法!
class Sulution {
    public boolean isUnique1(String astr) {
        if (astr == null || astr.length() == 0) {
            return true;
        }
        int[] counts = new int[26];
        for (int i = 0, length = astr.length(); i < length; i++) {
            int pos = astr.charAt(i) - 'a';
            if (counts[pos] >= 1) {
                return false;
            }
            counts[pos] += 1;
        }
        return true;
    }

    public boolean isUnique2(String astr) {
        if (astr == null || astr.length() == 0) {
            return true;
        }
        int mark = 0;
        for (int i = 0, length = astr.length(); i < length; i++) {
            int flag = 1 << (astr.charAt(i) - 'a');
            if ((mark & flag) != 0) {
                return false;
            } else {
                mark |= flag;
            }
        }
        return true;
    }
}
分析:

统计次数:

  • 时间复杂度:O(N)
  • 空间复杂度:O(N)

位运算:

  • 时间复杂度:O(N)
  • 空间复杂度:O(1)

2. Review

How to Go from Junior to Senior Programmer 如何从初级程序员变成高级程序员?

从 InfoQ 看到的一篇译文,算是经验之谈。高工不是根据经验判定,而是分析的技能。深有同感,我总是把代码放在第一位,有时候忽略了业务场景,考虑问题的出发点不同,导致任务处理方式也不同。代码只是一部分,真正的目的是解决问题。

一名程序员不会因为他会写代码而成为一名合格的程序员,而是因为在开始做任何事情之前先做分析,然后再来开展工作,这才是真正的程序员。

3. Tip

最近某 BAT 之一坑害了 pandownload,真的是令人发指!自己的产品做得烂不去反思,却耍小伎俩坑无辜的开发者。天下苦 B 久矣,作为程序员,从抵制 B 开始。推荐一个好用的木弟子 AgentNeo,线路非常稳定,价格也实惠。通过我的链接注册,可以享受 5 元优惠 https://neoproxy.me/?rc=r1gv64bl
。(结算时选择团购下单,团购代码 21853G0V,享受 8 折优惠,活动截止 2020-04-25)

4. Share

在 GitHub 上搜了一些 Android 面试资料 http://note.youdao.com/noteshare?id=a04ac812925b23f6dc112eda70079c53,愿步步高升。

题外话:

由于个人原因,ARTS 暂停了将近半年,后续恢复打卡,请见谅。

相关文章

  • 每周 ARTS 第 26 期

    1. Algorithm 判定字符是否唯一(简单) 描述: 实现一个算法,确定一个字符串 s 的所有字符是否全都不...

  • 每周 ARTS 第 19 期

    1. Algorithm 46. 全排列(中等) 描述: 给定一个没有重复数字的序列,返回其所有可能的全排列。 示...

  • 每周 ARTS 第 14 期

    1. Algorithm 78. 子集(中等) 描述: 给定一组不含重复元素的整数数组 nums,返回该数组所有可...

  • 每周 ARTS 第 17 期

    1. Algorithm 1114. 按序打印(简单) 描述: 三个不同的线程将会共用一个 Foo 实例,它们会被...

  • 每周 ARTS 第 21 期

    1. Algorithm 24. 两两交换链表中的节点(中等) 描述: 给定一个链表,两两交换其中相邻的节点,并返...

  • 每周 ARTS 第 20 期

    1. Algorithm 1116. 打印零与奇偶数(中等) 描述: 有这样一个类 ZeroEvenOdd,相同的...

  • 每周 ARTS 第 18 期

    1. Algorithm 110. 平衡二叉树(简单) 描述: 给定一个二叉树,判断它是否是高度平衡的二叉树。本题...

  • 每周 ARTS 第 23 期

    1. Algorithm 62. 不同路径(中等) 描述: 一个机器人位于一个 m x n 网格的左上角 (起始点...

  • 每周 ARTS 第 24 期

    1. Algorithm 22. 生成括号(中等) 描述: 给出 n 代表生成括号的对数,请你写出一个函数,使其能...

  • 每周 ARTS 第 22 期

    1. Algorithm 15. 三数之和(中等) 描述: 给定一个包含 n 个整数的数组 nums,判断 num...

网友评论

      本文标题:每周 ARTS 第 26 期

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