前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不要问ARTS是啥,直接开干

不要问ARTS是啥,直接开干

作者头像
程序员小跃
发布2019-12-27 15:05:22
4800
发布2019-12-27 15:05:22
举报
文章被收录于专栏:程序员小跃程序员小跃

上周因为版本的改版,投入了比较多的时间,又恰逢中秋,结果就把打卡给鸽了,实在有点对不住大家。

但是有朋友鼓励我,还是在等待着我的更新,所以,这周我又回来了。坚持一种习惯,不能偷懒,不然,哪天开始,你都不知道自己还曾拥有过这么好的习惯。

一起写作课的同学,有的上了头条的青云奖,有的公众号阅读量已经很高,而我还在原地踏步中,向我优秀的同学看齐,还需要多多努力。

不要问ARTS为什么能让我坚持这么久,看完每一期的打卡,你就懂了。现在已经不需要更多言语表达了,直接开干!这是第二十五期打卡。

Algorithm LeetCode算法

只出现一次的数字 (https://leetcode-cn.com/problems/single-number/)

题目描述:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:

你的算法应该具有线性时间复杂度。你可以不使用额外空间来实现吗?

示例1:

代码语言:javascript
复制
输入: [2,2,1]
输出: 1

示例2:

代码语言:javascript
复制
输入: [4,1,2,1,2]
输出: 4

  1. HashMap 解法

拿到这个题目,其实之前也做过几个类似的,判断是否有重复的。那第一反应就是用HashMap来做。为什么?

因为HashMap的Key是不允许重复的。所以,你可以在执行数据查找的时候,利用这个特点来进行。先存入一个数据,遇到重复的,把这个重复的key删除即可,那最后留下的Map只有一个数,就是你想要的数据。

具体的做法,其实很简单,参考如下即可。就是时间和空间复杂度不友好,都是O(n)。

代码语言:javascript
复制
public static int singleNumber(int[] nums) {
    int result = 0;
    if (nums == null || nums.length == 0) {
        return 0;
    }

    Map<Integer, Integer> map = new HashMap<>();

    for (int i = 0; i < nums.length; i++) {
        if (map.containsKey(nums[i])) {
            map.remove(nums[i]);
        } else {
            map.put(nums[i], nums[i]);
        }
    }

    for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
        result = entry.getValue();
    }
    return result;
}

  1. 异或解法

当然了,每个题目出来,总有他一个特点,以及一个优秀的解法。

在这里,这个解法就是采用异或的方式。针对题目,我们有以下几个特点可以参考:

1. 交换律:a ^ b ^ c <=> a ^ c ^ b 2. 任何数于0异或为任何数 0 ^ n => n 3. 相同的数异或为0: n ^ n => 0

所以,这解法就一目了然了,为什么用异或,你看懂了吗?

代码语言:javascript
复制
public static int singleNumber1(int[] nums) {
    int result = 0;
    for (int num : nums) {
        result ^= num;
    }

    return result;
}

除了这两种解法,其实还有暴力循环,快速排序或者更多的方式,在这里就不一一说明了,读者们可以自行去查找。

Review 阅读并点评至少一篇英文文章

How to Build Good Software (

https://www.csc.gov.sg/articles/how-to-build-good-software?utm_source=wanqu.co&utm_campaign=Wanqu+Daily&utm_medium=website)

这是写给新加坡公务员看的。标题咋看之下貌不惊人,实际上是一篇相当有水平的深入浅出的软件工程佳作,金句不断。如果你有几年的工作经验了,读起来会颇有共鸣。

作者是 MIT 计算机系毕业,以前在 Google 做过 PM。作者的弟弟也是 MIT 计算机系毕业,在 Scala 圈子里颇有名气。他们的父亲 C++ 代码写得不错,声称退休后打算读一下 Haskell 教科书。

文中出现的金句很多,我在这里分享部分给大家:

  1. Why Bad Software Happens to Good People
  • The root cause of bad software has less to do with specific engineering choices, and more to do with how development projects are managed.
  1. Reusing Software Lets You Build Good Things Quickly
  • Software engineering is about building automated systems, and one of the first things that gets automated away is routine software engineering work.
  1. Software Is Limited by Complexity
  • Building good software involves alternating cycles of expanding and reducing complexity.
  1. Software Is about Developing Knowledge More than Writing Code
  • Software should be treated not as a static product, but as a living manifestation of the development team’s collective understanding.

3 Principles for Good Software Development

  1. Start as Simple as Possible
  2. Seek Out Problems and Iterate
  3. Hire the Best Engineers You Can

所以,这篇文章也让我看到了新加坡那边的编码要求以及一些习惯,看上去,其实都是大同小异。比如提到尽可能的去实践,找出并迭代问题,降低复杂度,扩展程序。这些能力,无论你在哪,哪怕是天涯海角,都是每个程序员必备的技能。

Tip 一个技术技巧

前面两期,都介绍了Linux常用命令的其中5种,我每次都给出5个,也让大家好消化一点,毕竟这个只有实际操作过才知道。

今天介绍11-15.

  1. xargs 将所有图片文件拷贝到外部驱动器
代码语言:javascript
复制
$ ls *.jpg | xargs -n1 -i cp {} /external-hard-drive/directory
将系统中所有jpd文件压缩打包
代码语言:javascript
复制
$ find / -name *.jpg -type f -print | xargs tar -cvzf images.tar.gz
下载文件中列出的所有url对应的页面
代码语言:javascript
复制
$ cat url-list.txt | xargs wget –c
  1. ls 以易读的方式显示文件大小(显示为MB,GB…)
代码语言:javascript
复制
$ ls -lh
-rw-r----- 1 ramesh team-dev 8.9M Jun 12 15:27 arch-linux.txt.gz
以最后修改时间升序列出文件
代码语言:javascript
复制
$ ls -ltr
在文件名后面显示文件类型
代码语言:javascript
复制
$ ls -F
  1. pwd 输出当前工作目录
  2. cd cd -可以在最近工作的两个目录间切换

使用shopt -s cdspell可以设置自动对cd命令进行拼写检查

  1. gzip 创建一个*.gz的压缩文件
代码语言:javascript
复制
$ gzip test.txt
解压*.gz文件
代码语言:javascript
复制
$ gzip -d test.txt.gz
显示压缩的比率
代码语言:javascript
复制
$ gzip -l *.gz
compressed        uncompressed  ratio uncompressed_name
23709               97975  75.8% asp-patch-rpms.txt

Share 一篇有观点和思考的技术文章

设计模式走起来。

公众号地址: 设计模式之模板方法模式(三)

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 奔跑吧攻城狮 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Algorithm LeetCode算法
  • Review 阅读并点评至少一篇英文文章
  • Tip 一个技术技巧
  • Share 一篇有观点和思考的技术文章
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档