美文网首页
swift搜索面试实战题-搜索旋转有序数组

swift搜索面试实战题-搜索旋转有序数组

作者: 前年的邂逅_Jerry | 来源:发表于2019-11-01 10:47 被阅读0次

    一个有序数组可能在某个位置旋转了。给定一个目标值,查找并返回这个元素在数组中的位置,如果不存在,则返回-1。假设数组中没有重复值。
    举一个例子:【0,1,2,3,4,5,6,7】在4这个数字位置上旋转后变为【4,5,6,7,0,1,2】。搜索4返回0。搜索8返回-1

    override func viewDidLoad() {
            super.viewDidLoad()
            let arr0 = [24,25,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23]
            let arr1 = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,0]
            let arr = arr0
            for i in arr{
                print(search(arr, target: i, low: 0, high: arr.count - 1))
            }
        }
        func search(_ arr : [Int] , target : Int , low : Int , high : Int) -> Int {
            guard low <= high else {
                return -1
            }
            var mid = (low + high) / 2
            if arr[mid] == target{
                return mid
            }
            if (arr[mid] >= arr[low]){
                //左边为顺序
                if target >= arr[low] , target < arr[mid]{
                    mid -= 1
                    return search(arr, target: target, low: low, high: mid)
                }else{
                    mid += 1
                    return search(arr, target: target, low: mid, high: high)
                }
            }else{
                //右边为顺序
                if target > arr[mid] , target <= arr[high]{
                    mid += 1
                    return search(arr, target: target, low: mid, high: high)
                }else{
                    mid -= 1
                    return search(arr, target: target, low: low, high: mid)
                }
            }
        }
    

    相关文章

      网友评论

          本文标题:swift搜索面试实战题-搜索旋转有序数组

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