mirror of
https://github.com/krahets/hello-algo.git
synced 2026-04-25 11:04:18 +08:00
build
This commit is contained in:
@@ -8,7 +8,9 @@ comments: true
|
||||
|
||||
我们先来求解一个简单的二分查找问题。
|
||||
|
||||
!!! question "给定一个长度为 $n$ 的有序数组 `nums` ,元素按从小到大的顺序排列。查找并返回元素 `target` 在该数组中的索引。若数组中不包含该元素,则返回 $-1$ 。数组中不包含重复元素。"
|
||||
!!! question
|
||||
|
||||
给定一个长度为 $n$ 的有序数组 `nums` ,元素按从小到大的顺序排列。请查找并返回元素 `target` 在该数组中的索引。若数组中不包含该元素,则返回 $-1$ 。数组中不包含重复元素。
|
||||
|
||||
该数组的索引范围可以使用区间 $[0, n - 1]$ 来表示。其中,**中括号表示“闭区间”,即包含边界值本身**。在该表示下,区间 $[i, j]$ 在 $i = j$ 时仍包含一个元素,在 $i > j$ 时为空区间。
|
||||
|
||||
|
||||
@@ -14,7 +14,9 @@ comments: true
|
||||
|
||||
## 10.2.1. 查找最左一个元素
|
||||
|
||||
!!! question "查找并返回元素 `target` 在有序数组 `nums` 中首次出现的索引。若数组中不包含该元素,则返回 $-1$ 。数组可能包含重复元素。"
|
||||
!!! question
|
||||
|
||||
给定一个长度为 $n$ 的有序数组 `nums` 。请查找并返回元素 `target` 在该数组中首次出现的索引。若数组中不包含该元素,则返回 $-1$ 。数组可能包含重复元素。
|
||||
|
||||
实际上,我们可以仅通过二分查找解决以上问题。方法的整体框架不变,先计算中点索引 `m` ,再判断 `target` 和 `nums[m]` 大小关系:
|
||||
|
||||
@@ -104,11 +106,11 @@ comments: true
|
||||
while i <= j:
|
||||
m = (i + j) // 2 # 计算中点索引 m
|
||||
if nums[m] < target:
|
||||
i = m + 1 # 此情况说明 target 在区间 [m+1, j] 中
|
||||
i = m + 1 # target 在区间 [m+1, j] 中
|
||||
elif nums[m] > target:
|
||||
j = m - 1 # 此情况说明 target 在区间 [i, m-1] 中
|
||||
j = m - 1 # target 在区间 [i, m-1] 中
|
||||
else:
|
||||
j = m - 1 # 此情况说明首个小于 target 的元素在区间 [i, m-1] 中
|
||||
j = m - 1 # 首个小于 target 的元素在区间 [i, m-1] 中
|
||||
if i == len(nums) or nums[i] != target:
|
||||
return -1 # 未找到目标元素,返回 -1
|
||||
return i
|
||||
|
||||
@@ -6,9 +6,9 @@ comments: true
|
||||
|
||||
在算法题中,**我们常通过将线性查找替换为哈希查找来降低算法的时间复杂度**。我们借助一个算法题来加深理解。
|
||||
|
||||
!!! question "两数之和"
|
||||
!!! question
|
||||
|
||||
给定一个整数数组 `nums` 和一个整数目标值 `target` ,请在数组中搜索“和”为目标值 `target` 的两个整数,并返回他们在数组中的索引。注意,数组中同一个元素在答案里不能重复出现。返回任意一个解即可。
|
||||
给定一个整数数组 `nums` 和一个目标元素 `target` ,请在数组中搜索“和”为 `target` 的两个元素,并返回它们的数组索引。返回任意一个解即可。
|
||||
|
||||
## 10.3.1. 线性查找:以时间换空间
|
||||
|
||||
|
||||
Reference in New Issue
Block a user