美文网首页LeetCode题库-Swift解题
35. 搜索插入位置(Swift版)

35. 搜索插入位置(Swift版)

作者: Mage | 来源:发表于2019-03-20 21:16 被阅读0次

    一、题目

    给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
    你可以假设数组中无重复元素。
    示例 1:

    输入: [1,3,5,6], 5
    输出: 2
    

    示例 2:

    输入: [1,3,5,6], 2
    输出: 1
    

    示例 3:

    输入: [1,3,5,6], 7
    输出: 4
    

    示例 4:

    输入: [1,3,5,6], 0
    输出: 0
    

    二、解题

    方法一:
    直接遍历(searchInsert())
    时间复杂度:O(n)。空间复杂度:O(1)。
    方法二:
    用二分法(searchInsert1())
    时间复杂度:O(log(n))。空间复杂度:O(1)。

    实际在LeetCode上运行测试用例,方法一和方法二执行时间差不多,想来应该是测试用例数据量比较小的原因。

    三、代码实现

        class Solution {
    
            func searchInsert(_ nums: [Int], _ target: Int) -> Int {
                for (index, n) in nums.enumerated() {
                    if n >= target {
                        return index
                    }
                }
                return nums.count
            }
            func searchInsert1(_ nums: [Int], _ target: Int) -> Int {
                var low = 0
                var high = nums.count
                var mid = 0
                
                while low < high {
                    mid = (high + low) / 2
                    if nums[mid] > target {
                        high = mid
                    }else if nums[mid] < target {
                        low = mid + 1
                    }else{
                        return mid
                    }
                }
                return low
            }
        }
    

    Demo地址:github

    相关文章

      网友评论

        本文标题:35. 搜索插入位置(Swift版)

        本文链接:https://www.haomeiwen.com/subject/vhrtvqtx.html