A:35. 插入搜索位置#
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O (log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4
提示:
- 1 <= nums.length <= 10^4
- -10^4 <= nums[i] <= 10^4
- nums 为 无重复元素 的 升序 排列数组
- -10^4 <= target <= 10^4
function searchInsert(nums: number[], target: number): number {
let left = 0
let right = nums.length - 1
if (target <= nums[0]) {
return left
}
if (target > nums[right]) {
return right + 1
}
let mid = Math.floor((left + right) / 2)
while (left < right - 1) {
const midValue = nums[mid]
if (midValue === target) {
return mid
}
if (midValue < target) {
left = mid
} else {
right = mid
}
mid = Math.floor((left + right) / 2)
}
return right
}
提交结果为:
65/65 cases passed (64 ms)
Your runtime beats 72.07 % of typescript submissions
Your memory usage beats 52.45 % of typescript submissions (43.7 MB)
看到题目要求使用时间复杂度为 O(logn)
的算法,基本可以判断为使用二分法,前几天刚做过一道二分法的题目,这次上手更快了。写的时候在边界条件的判断上还是花了一些时间去想的。首先是考虑 mid
始终是 left
和 right
中间的一个值,那就无法覆盖到超出这个边界的情况,因此上来先判断了下 target 是不是会超出最大边界的,是则返回边界情况。然后再是 left
和 right
会不断压缩,直到压缩到 left === right - 1
的情况,这时候区间已经无法再压缩了,因此要终止循环,最后因为一开始我们已经提前确定了值不会超出 left
和 right
的范围,因此如果中间过程中没有命中某一项,那直接范围 right
就是正确的插入位置。
R:How to Engineer the Perfect Stable Diffusion Prompt#
以后的文章都会通过 QA 法来记录总结,这样会更容易掌握文章的内容,后续回顾也会更加方便。
Q:为什么高质量的 Prompt 对使用 Stable Diffusion 来说很重要?
它给模型传达指令和操作的框架,影响模型的执行,从而影响结果的质量。掌握 Prompt Engineering 的技巧可以让艺术家探索艺术路径、实验艺术风格,甚至在 AI 艺术领域定义资产的艺术身份。
Q:创建有效的 Stable Diffusion Prompt 的步骤是什么?
- 定义图片类型
照片 (photograph)、素描 (sketch)、3D 渲染 (3D render) 还是绘画 (painting),定义好类型可以作为很好的基础 - 定义主体
清晰定义主体和它的属性。主体可以是物体、人、风景或其它图像中的核心元素 - 定义场景
定义主体所在的环境,可以是背景细节、天气条件、一天的时间等。描述得越清晰效果越好 - 定义风格
比如现实 (realism)、超现实 (surrealism)、印象派 (impressionism)。或者是某位艺术家的风格 - 说明光照细节
使用特定词语说明光照条件,比如背光 (backlight)、烛光 (candlelight) 或自然光 (natural lighting);说明细致程度,比如高度细致 (highly detailed)、颗粒感 (grainy) 或光滑 (smooth) - 声明构图
定义图中元素的布局。比如鸟瞰图 (aerail view)、特写 (close-up)、广角 (wide-angle) 或其它构图方式。 - 定义色彩风格
如果有色彩偏好也需要定义,比如三色配合 (triadic color scheme) 或者水洗配色 (washed color) - 避免过度复杂
过度复杂或矛盾的指令可能会让模型无法输出质量好的结果
T:SeamlessM4T - 多合一的多语言、多模态模型#
Meta AI 最新开源了一个叫做 SeamlessM4T 的多语言多模态模型,可以进行 100 多种语音到文本、语音到语音、文本到文本的翻译和语音识别任务。
S:《李笑来:我的读书经验》摘录#
之前摘录过一段李笑来老师这篇文章里的一句话了,感觉李笑来老师这篇文章写得真的不错,今天就又想起来当时看到颇有感触的一句话:
批量阅读学术文献,就好像是从父母的庇护下离开而后独立生存一样,刚开始的时候甚至有一点害怕,但是,没有过多久,就开始可怜起过去的自己。过去怎么那么傻,竟然总是要衣来伸手,饭来张口,不来什么,就都没有。
本科教育结束之后,理论上来讲,就应该把大部分时间用来读学术文献,很可惜,貌似在我们国家,根本就没有这个概念。学术研究被翻译成通俗读物,这个时间滞后实在是太严重了。
最近也读了一点关于大语言模型的论文,一方面感受到了李笑来老师说的 “刚开始有点害怕,没过多久就觉得早该如此” 的感觉,论文确实是一个能了解关心的领域的前沿的快速有效的路径,阅读论文是一个值得养成的习惯。
Reference: