James Tsang

James Tsang

A developer.
github
twitter
tg_channel

ARTS 打卡第 2 天

A:26. 刪除有序數組中的重複項

給你一個 升序排列 的數組 nums ,請你 原地 刪除重複出現的元素,使每個元素 只出現一次 ,返回刪除後數組的新長度。元素的 相對順序 應該保持 一致 。然後返回 nums 中唯一元素的個數。
考慮 nums 的唯一元素的數量為 k ,你需要做以下事情確保你的題解可以被通過:
更改數組 nums ,使 nums 的前 k 個元素包含唯一元素,並按照它們最初在 nums 中出現的順序排列。nums 的其餘元素與 nums 的大小不重要。
返回 k 。

第一次寫的版本:

function removeDuplicates(nums: numbs[]): number {
  const record: Record<string, boolean> = {}
  for (let i = 0; i < nums.length; i += 1) {
    if (record[nums[i]]) {
      nums.splice(i, 1)
      i -= 1
    } else {
      record[nums[i]] = true
    }
  }
  return nums.length
}

提交之後顯示運行時間和內存佔用都只在倒數 20% 的排名位置。於是就去看了題解裡面更優的解法,裡面提到了「雙指針」。

「雙指針」的思路是記錄兩個指針位置(不是真正的內存指針),一個快指針,一個慢指針,快指針用於遍歷數組,慢指針記錄並修改最後一個不同數字的位置,當快指針走完時,慢指針也已經記錄好了全部的不相同數字。代碼示例如下:

function removeDuplicates(nums: numbs[]): number {
  if (nums.length < 2) {
    return nums.length
  }
  let fast = 1
  let slow = 0
  while (fast < nums.length) {
    if (nums[fast] !== nums[slow]) {
      slow += 1
      nums[slow] = nums[fast]
    }
    fast += 1
  }
  return slow + 1
}

nums[fast] !== nums[slow] 時,說明遇到了新的不同數值,於是將這個數值記錄到 slow+1 的位置上,當 fastnums 遍歷完時,所有不同值也就通過慢指針一個個記錄完了。這種方法能使用的前提是這是一個有序數組,我一開始沒看到題干裡這個條件,還困惑了很久。

「雙指針」方法除了用於這個場景,還可以用於類似「尋找有序數組中兩個數的和等於某個值」的情況,整體思路都是記錄兩個位置,分別進行遍歷或操作,或者兩個都在遍歷,比如左右兩邊向中間逼近。

R:Code Interpreter API

作者在 Youtube 上看到大量 ChatGPT 的 Code Interpreter 宣傳後,發現這裡還有未被實現的需求,於是自己實現了一個。

相比於 ChatGPT 官方的版本,這個自己實現的版本優勢是:1. 可以聯網獲取實時數據,比如可以讓它畫出比特幣 2023 年的價格曲線圖;2. 可以本地部署:於是就可以和本地其它應用程序聯動,還有更加自由的環境管理,比如安裝一些額外的包。

要實現 Code Interpreter,有兩個核心要素:一是借助 OpenAI API 的 Function Calling 能力產出要調用函數的代碼;二是擁有一個能執行 Python 代碼的環境。例如用戶指定要輸出一個正弦函數圖,那麼需要得到繪製正弦函數圖的代碼,然後送到 Python 解釋器中執行,輸出圖片然後展示給用戶。在這個過程中 LLM Agent 可能還要對結果做一些解釋和細節補充。此外還需要考慮文件 IO 以及會話中變量保存的能力。

這裡 Python 解釋器和文件 IO、變量保存都可以看作是 LangChain 的一個 Tool,把它塞到 LangChain 裡被調用即可,這個「Tool」作者把它製作成了 codebox-api 項目(也是昨天打卡的時候分享的項目)。它的底層實現是每當創建一個新的 Session 的時候,就會創建一個新的 Jupyter Kernel 會話。

整體解決方案作者把它封裝成了 codeinterpreter-api,以方便使用者更簡單地創建 Session,執行 Code Interpreter。

作者的後續計劃是:讓它更容易部署和擴展,變成生產可用的 API,同時支持更多的模型,比如 Claude-V2, Open Orca。作者也歡迎大家來一起貢獻。

T:中文 DOS 遊戲

一個中文 DOS 遊戲項目,可以在網頁端玩兩千多款經典的 DOS 遊戲。

S:閱讀《饑餓的盛世:乾隆時代的得與失》 的筆記

文明所採用的體制沒有唯一的標準,沒有最好只有更好,乾隆已經將封建王朝的體制效率發揮到了極致,但依然阻擋不了歷史的車輪將王朝碾過。要實現體制的進化,文化和思想的解放是必要條件,只有飛揚超脫的思想才能將文明推向下一個階段(當然也可能是毀滅)。

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。