mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 07:35:35 +08:00
@ -352,6 +352,60 @@ def search(nums, target)
|
||||
end
|
||||
```
|
||||
|
||||
**Swift:**
|
||||
|
||||
```swift
|
||||
// (版本一)左闭右闭区间
|
||||
func search(nums: [Int], target: Int) -> Int {
|
||||
// 1. 先定义区间。这里的区间是[left, right]
|
||||
var left = 0
|
||||
var right = nums.count - 1
|
||||
|
||||
while left <= right {// 因为taeget是在[left, right]中,包括两个边界值,所以这里的left == right是有意义的
|
||||
// 2. 计算区间中间的下标(如果left、right都比较大的情况下,left + right就有可能会溢出)
|
||||
// let middle = (left + right) / 2
|
||||
// 防溢出:
|
||||
let middle = left + (right - left) / 2
|
||||
|
||||
// 3. 判断
|
||||
if target < nums[middle] {
|
||||
// 当目标在区间左侧,就需要更新右边的边界值,新区间为[left, middle - 1]
|
||||
right = middle - 1
|
||||
} else if target > nums[middle] {
|
||||
// 当目标在区间右侧,就需要更新左边的边界值,新区间为[middle + 1, right]
|
||||
left = middle + 1
|
||||
} else {
|
||||
// 当目标就是在中间,则返回中间值的下标
|
||||
return middle
|
||||
}
|
||||
}
|
||||
|
||||
// 如果找不到目标,则返回-1
|
||||
return -1
|
||||
}
|
||||
|
||||
// (版本二)左闭右开区间
|
||||
func search(nums: [Int], target: Int) -> Int {
|
||||
var left = 0
|
||||
var right = nums.count
|
||||
|
||||
while left < right {
|
||||
let middle = left + ((right - left) >> 1)
|
||||
|
||||
if target < nums[middle] {
|
||||
right = middle
|
||||
} else if target > nums[middle] {
|
||||
left = middle + 1
|
||||
} else {
|
||||
return middle
|
||||
}
|
||||
}
|
||||
|
||||
return -1
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
-----------------------
|
||||
|
Reference in New Issue
Block a user