Merge pull request #567 from YDLIN/master

添加0704.二分查找 Swift版本
This commit is contained in:
程序员Carl
2021-08-06 10:15:25 +08:00
committed by GitHub

View File

@ -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
}
```
-----------------------