给你一个 升序排列 的数组 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
的位置上,当 fast
将 nums
遍历完时,所有不同值也就通过慢指针一个个记录完了。这种方法能使用的前提是这是一个有序数组,我一开始没看到题干里这个条件,还困惑了很久。
“双指针” 方法除了用于用于这个场景,还可以用于类似 “寻找有序数组中两个数的和等于某个值” 的情况,整体思路都是记录两个位置,分别进行遍历或操作,或者两个都在遍历,比如左右两边向中间逼近。
作者在 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。作者也欢迎大家来一起贡献。
一个中文 DOS 游戏项目,可以在网页端玩两千多款经典的 DOS 游戏。
S:阅读《饥饿的盛世:乾隆时代的得与失》 的笔记
文明所采用的体制没有唯一的标准,没有最好只有更好,乾隆已经将封建王朝的体制效率发挥到了极致,但依然阻挡不了历史的车轮将王朝碾过。要实现体制的进化,文化和思想的解放是必要条件,只有飞扬超脱的思想才能将文明推向下一个阶段(当然也可能是毁灭)。
Reference: