Dimple在左耳听风ARTS打卡(二十四)

  • 2019 年 12 月 25 日
  • 筆記

Android凉了?前段时间刚更新了新的Logo,换了新的叫法,现在Android 10终于向亲儿子系统进行了推送。更安全,更好,更强的版本来袭,他是真的凉了吗?

文中有Android 10的介绍地址,感兴趣的赶紧去看看呗。我们都希望第三个系统出来挑战现在的Android和iOS,争夺市场的份额。在没彻底出来之前,还是看看Android的改版,带给我们的是什么吧。

插播一条感慨:昨晚的中国队,浪费了杨超越的上上签。但是,上上签还没结束,希望这个签,能让我们顺利去明年的东京奥运。篮球,是五个人的运动,是一个TEAM,后续继续加油!

Algorithm LeetCode算法

反转字符串 (https://leetcode-cn.com/problems/reverse-string/)

题目描述:编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

示例1:

输入:["h","e","l","l","o"]  输出:["o","l","l","e","h"]

示例2:

输入:["H","a","n","n","a","h"]  输出:["h","a","n","n","a","H"]

今天还是玩玩字符串的反转。咋一看这题,其实大家也知道了,难度并不大,我在这里想表达就是使用两种方式来进行解题。

方法一: 双指针解法。

使用while循环,初始化的时候,用i和j分别指向数组的第一个和最后一个元素。每次交换i和j两个位置的元素,然后将i向右,j向左往中间靠拢即可。

public static void reverseString1(char[] s) {      if (s == null || s.length == 0) {          return;      }        int i = -1;      int j = s.length;      while ( i++ < --j) {          swap1(s, i, j);      }        for (char c : s) {          System.out.println(c);      }  }    // 交换元素  public static void swap1(char[] s,int i, int j) {      char x = s[i];      s[i] = s[j];      s[j] = x;  }

方法二: 递归

又是熟悉的递归,在算法里,递归真的是无处不在,用得好非常好,用的不好,那还得小心堆栈溢出的情况。

这里其实和方法一的思路差不多,就是方法一用的是while循环获取元素,在递归这里,我们让递归自己进行数组位置的移动,也是都往中间跑。

public static void reverseString(char[] s) {      if (s == null || s.length == 0) {          return;      }        int i = 0;      int j = s.length;      swap(s, i, j - 1);  }    // 使用递归交换元素  public static void swap(char[] s,int i,int j) {      if (i >= j) {          return;      }      char x = s[i];      s[i] = s[j];      s[j] = x;      swap(s, i + 1, j - 1);  }

大致上就是这两种方法即可。因为只能在当前数组上进行修改,所以交换元素肯定是必经之路了。唯一变化的就是元素如何获取,方法一用的循环,方法二用的递归,大家知道性能上哪个好一些么?欢迎留言区给我答案。小编晚点再公布。

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

Android 10: Everything you need to know! (https://www.androidcentral.com/android-10)

Android 10 揭开了它最终的面纱,今天正式版已经问世了。现在的Android发展,也越来越好,虽然很多人都觉得它凉了,但是小编不这么认为。

目前的Android虽然已经过了高速发展的时期,但也还是在巅峰期,这个巅峰谁也不知道持续多久,但是更进一步的发展,Google一直在努力,一直在进化,一直在向开发者,用户等提供更好的版本,更好的体验。

文中介绍了Android新的几大特性,而且还能看到新的清爽的Logo,以及更安全的系统。感兴趣的,可以看看这个地址给的新版的介绍。如果你手上是亲儿子的手机,那么恭喜你,静静地等待推送更新吧。

Tip 一个技术技巧

在第二十二期的时候,我们介绍了Linux常用命令的其中5种,忘记的同学,可以去看看Dimple在左耳听风ARTS打卡(二十二)

今天,我们继续介绍5个常用的Linux命令。

  1. awk删除重复行
$ awk '!($0 in array) { array[$0]; print}' temp  打印/etc/passwd中所有包含同样的uid和gid的行
$ awk -F ':' '$3=$4' /etc/passwd  打印文件中的指定部分的字段
$ awk '{print $2,$5;}' employee.txt
  1. vim打开文件并跳到第10行
$ vim +10 filename.txt  打开文件跳到第一个匹配的行
$ vim +/search-term filename.txt  以只读模式打开文件
$ vim -R /etc/passwd
  1. diff比较的时候忽略空白符
$ diff -w name_list.txt name_list_new.txt
  1. sort以升序对文件内容排序
$ sort names.txt  以降序对文件内容排序
$ sort -r names.txt  以第三个字段对/etc/passwd的内容排序
$ sort -t: -k 3n /etc/passwd | more
  1. export输出跟字符串oracle匹配的环境变量
$ export | grep ORCALE  declare -x ORACLE_BASE="/u01/app/oracle"  declare -x ORACLE_HOME="/u01/app/oracle/product/10.2.0"  declare -x ORACLE_SID="med"  declare -x ORACLE_TERM="xterm"  设置全局环境变量
$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0