4.搜索插入位置-力扣

426 阅读1分钟

题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

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
    • 跳出循环时,返回左边