天天看點

ARTS - 01

目錄

  • ARTS - 01
    • Alg
      • 題目
      • 解答
    • Rev
    • Tip
    • Share

[題目(]https://leetcode-cn.com/problems/rearrange-words-in-a-sentence/)
           

一個很簡單的題目,但是好久沒寫算法題目了,略微生疏,很多地方沒有考慮到。粗暴地直接送出-運作出錯-修改-送出-編譯出錯-修改-送出-.... , 甚至沒有自測幾個用例,罪過罪過,阿彌陀佛。

就是把給定的 n 個字元串,其中最長的字元串長度為 l,按照長度從低到高輸出,相同長度保持輸入順序。

開了一個最大容量的數組,每個元素是一個連結清單,表示長度為多少的字元串們。周遊輸入字元串數組,放到各自長度上。然後周遊輸出。S = O(固定,輸入字元串裡最長的字元串長度 l ) , 最好時間複雜度 O(n),最差 O( n2).

有改進空間 :

  • 比如每個連結清單都儲存一個尾節點指針,加入的時候直接加到尾部,時間就是穩定 O(n)。
  • 輸出的時候,可以修改數組增加“下個非空元素位置”的資訊,也可以讓輸出時候的周遊在輸入字元串長度差異很大的時候有相當的優化。

    缺點:

  • 空間占用太大,可能有浪費

ANdroid 的一些開發實踐建議,簡單可以分為 :

  • Android 項目代碼的實踐。例如 如何引庫、代碼檢測、測試驅動等,還有一些實踐的建議:例如關于 Rx,EventBus,Service 的等。
  • Android 項目建構。主要是 gradle 建構如何加速,以及一些建構的設定,比如 CI 接入等。
  • Android 項目功能的實踐。 考慮裝置狀态(電量、網絡連接配接狀态)、UI 等(裡面有句很搞笑的話

    A user interface is like a joke. If you have to explain it, it’s not that good;

    😁)

在使用 node 跑 js 代碼的時候,可以使用 chrome 來進行 debug , 具體方法為

  1. 增加

    --inspect

    選項,即

    node --inspect 正常的後續指令

    , 其中還可以自己指定 ip 和端口,具體參考 node 文檔吧 node-如何 debug。
  2. 在 chrome 裡打開 chrome 的 debug 頁面

    chrome://inspect

  3. 在頁面裡的

    Remote Target

    裡找到要 debug 的程式。

想簡單談談

java 項目的包結構

因為我本來比較注意代碼的整潔和優雅,前段時間特别希望加速項目子產品化,那時候想到了之前寫 js 的時候有一個 “檢視 cyclic dependency”, 于是用 AS 自帶的試了一下,出來的結果跟我想的不同,是以包為機關的( js 的 eslint 是以檔案為機關的)。後來想通了, java 檔案同包引用不需要明寫

import

,是以可能檢測起來不容易做到檢測同封包件的依賴關系。再後來又思考了一下,覺得 java 的包本來就應該是一個獨立的機關,這裡我想類比一下 kotlin 的檔案, kotlin 中一個檔案是可以有多個類的,這些檔案應該是

不可拆分

的, 而對應到 java, 我認為一個 package 就有點像 kotlin 裡的一個檔案(隻是像,不是完全對等)。

之前跟同學吃飯的時候也讨論了這一點,我說 Android 項目裡就不應該所有的 activity / fragment 各自一個包,毫無意義,隻能表示 “這個目錄下的檔案都以

Activity.java

結束”,他提到最開始的 AOSP 裡的很多項目都是這個寫法,我覺得就算 AOSP 很有權威,那他們在這點也做得不好。

上面的 Rev 裡的 blog 中也說到了這個, 裡面就有一條

Package by Feature, not layers;

。我認為分包應該是子產品化的前一步,也是項目解耦,以及各個檔案可以明确對外部的依賴以及更遠的重構的前提。

繼續閱讀