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