携手创作,一起生长!这是我参与「日新方案 8 月更文应战」的第21天,点击查看活动概况
前语
咱们社区连续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 工作健身教练。)的 Swift 算法题题解收拾为文字版以便利咱们学习与阅览。
LeetCode 算法到现在咱们现已更新到 161 期,咱们会坚持更新时刻和进展(周一、周三、周五早上 9:00 发布),每期的内容不多,咱们期望咱们能够在上班路上阅览,长久积累会有很大提升。
不积跬步,无以致千里;不积小流,无以成江海,Swift社区 伴你前行。如果咱们有建议和定见欢迎在文末留言,咱们会尽力满足咱们的需求。
难度水平:中等
1. 描绘
峰值元素是指其值严格大于左右相邻值的元素。
给你一个整数数组nums
,找到峰值元素并回来其索引。数组或许包含多个峰值,在这种情况下,回来 任何一个峰值 所在位置即可。
你能够假设nums[-1] = nums[n] = -∞
。
你必须完成时刻复杂度为 O(log n)
的算法来处理此问题。
2. 示例
示例 1
输入:nums = [1,2,3,1]
输出:2
解说:3 是峰值元素,你的函数应该回来其索引 2。
示例 2
输入:nums = [1,2,1,3,5,6,4]
输出:1 或 5
解说:你的函数能够回来索引 1,其峰值元素为 2;
或者回来索引 5, 其峰值元素为 6。
约束条件:
1 <= nums.length <= 1000
-2^31 <= nums[i] <= 2^31 - 1
- 关于一切有用的
i
都有nums[i] != nums[i + 1]
3. 答案
class FindPeakElement {
func findPeakElement(_ nums: [Int]) -> Int {
var left = 0, right = nums.count - 1, mid = 0
while left < right {
mid = (right - left) / 2 + left
if nums[mid] > nums[mid + 1] {
right = mid
} else {
left = mid + 1
}
}
return left
}
}
- 首要思维:经典的二叉搜索。
- 时刻复杂度: O(logn)
- 空间复杂度: O(1)
该算法题解的库房:LeetCode-Swift
点击前往 LeetCode 操练
关于咱们
咱们是由 Swift 爱好者一起保护,咱们会共享以 Swift 实战、SwiftUI、Swift 基础为核心的技能内容,也收拾搜集优异的学习材料。