/*
山峰数组arr,长度为n,满足以下性质:
存在索引为p的数字,使得 arr[0] < arr[1] < ... < arr[p] > arr[p+1] > ... > arr[n-1]。
给定一个山峰数组,请求出其峰顶,要求时间复杂度为O(logn)。
注:假定给定的数组的一定是山峰数组
*/
extension Daily {
static func test_leetcode852() {
let nums = [1,2,4,6,9,13, 21, 24 ,30,5]
Daily.leetcode852(nums)
}
static func leetcode852(_ nums: [Int]) {
if nums.count < 3 {
print("nums is invalid")
return
}
var i = 0, j = nums.count - 1;
var mid = (i + j)/2;
var count = 0;
while true {
count += 1
if count > nums.count {
break
}
if nums[mid] > nums[mid-1] && nums[mid] < nums[mid+1] {
i = mid
mid = (i + j)/2;
continue;
}
if nums[mid] < nums[mid-1] && nums[mid] > nums[mid+1] {
j = mid
mid = (i + j)/2;
continue;
}
print("峰顶=\(mid), 值=\(nums[mid]) ")
break
}
print("----- 结束 \(count)")
}
}
【LeetCode852】求山峰数组的峰顶
最新推荐文章于 2024-04-23 00:14:18 发布