题目:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
func searchInsert(_ nums: [Int], _ target: Int) -> Int {
//第一种:利用swift特性解题
let math = (nums + [target]).sorted().firstIndex(of: target)!
return math
// 第二种:for循环
if let math = nums.firstIndex(of: target) {
print(math)
return math
}else{
for (index,item) in nums.enumerated() {
if item >= target {
print(index)
return index
}
}
}
print(nums.count)
return nums.count
//第三种:二分法解题
var left = 0
var right = nums.count - 1
while left <= right {
let middle = left + (right - left)>>1
if nums[middle] < target {
left = middle+1
}else if nums[middle] > target{
right = middle - 1
}else{
print(middle)
return middle
}
}
print(left)
return left
}
总结:
-
第一种解题惊艳了我,还能这样玩。真是位大神
-
第二种是我最先想到的for循环解题思维
-
第三种是在看了解题区看了之后,还可以用二分法解题
- 二分法前提是在排序数组中才能使用该方法
- 左边大于中间值时 middle+1
- 右边大于中间值时 middle-1
- 相等时 返回middle
- 跳出循环时,返回左边