[Swift]LeetCode852. 山脉数组的峰顶索引 | Peak Index in a Mountain Array
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公众号:山青咏芝(shanqingyongzhi)
➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址: https://www.cnblogs.com/strengthen/p/10589081.html
➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
Let's call an array A
a mountain if the following properties hold:
A.length >= 3
- There exists some
0 < i < A.length - 1
such thatA[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
Given an array that is definitely a mountain, return any i
such that A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
.
Example 1:
Input: [0,1,0]
Output: 1
Example 2:
Input: [0,2,1,0]
Output: 1
Note:
3 <= A.length <= 10000
0 <= A[i] <= 10^6
- A is a mountain, as defined above.
我们把符合下列属性的数组 A
称作山脉:
A.length >= 3
- 存在
0 < i < A.length - 1
使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]
的 i
的值。
示例 1:
输入:[0,1,0] 输出:1
示例 2:
输入:[0,2,1,0] 输出:1
提示:
3 <= A.length <= 10000
- 0 <= A[i] <= 10^6
- A 是如上定义的山脉
20ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 var peak = 0 4 for i in 1..<A.count { 5 if A[i - 1] < A[i] { 6 peak = i 7 } 8 } 9 return peak 10 } 11 }
20ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 return mountain(0, A.count-1, A) 4 } 5 6 func mountain(_ from:Int,_ to:Int,_ A: [Int]) -> Int{ 7 if from == to{ return to } 8 if from == to - 1 { return A[from]>A[to] ? from : to } 9 let mid = (from + to)/2 10 if A[mid-1] < A[mid] && A[mid] > A[mid+1]{ 11 return mid 12 } 13 if A[mid] < A[mid+1] { 14 return mountain(mid,to,A) 15 }else{ 16 return mountain(from,mid,A) 17 } 18 } 19 }
24ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 var temp = 0 4 5 for (index, _) in A.enumerated() { 6 let aValue = A[index] 7 let bValue = A[index+1] 8 if aValue > bValue{ 9 temp = index 10 break 11 } 12 } 13 return temp 14 } 15 }
28ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 var left = 0, right = A.count - 1 4 var mid = (left + right) / 2 5 6 while !(A[mid] > A[mid - 1] && A[mid] > A[mid + 1]) { 7 if (A[mid] < A[mid - 1]) { 8 right = right - 1 9 } else { 10 left = left + 1 11 } 12 mid = (left + right) / 2 13 } 14 15 return mid 16 } 17 }
32ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 return mountain(0, A.count-1, A) 4 } 5 6 func mountain(_ from:Int,_ to:Int,_ A: [Int]) -> Int{ 7 if to - from < 2 { 8 if from == to{ 9 return to 10 } 11 if from == to - 1 { 12 return A[from]>A[to] ? from : to 13 } 14 } 15 let mid = (from + to)/2 16 if A[mid-1] < A[mid] && A[mid] > A[mid+1]{ 17 return mid 18 } 19 if A[mid] < A[mid+1] { 20 return mountain(mid,to,A) 21 }else{ 22 return mountain(from,mid,A) 23 } 24 } 25 }
84ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 var right = A.count - 1 4 var left = 0 5 while true { 6 var middle = (right + left) / 2 7 let moreThanLast = A[middle] > A[middle - 1] 8 let moreThanNext = A[middle] > A[middle + 1] 9 if moreThanLast && moreThanNext { 10 return middle 11 } 12 if moreThanLast && !moreThanNext { 13 left = middle 14 } 15 if !moreThanLast && moreThanNext { 16 right = middle 17 } 18 } 19 } 20 }
88ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 for i in 1...A.count-2 { 4 let ai = A[i] 5 let ai_1 = A[i-1] 6 let ai1 = A[i+1] 7 if ai > ai_1 && ai > ai1 { 8 return i; 9 } 10 } 11 return 0; 12 } 13 }
96ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 for i in 0..<A.count - 1 { 4 if A[i] > A[i+1] { 5 return i 6 } 7 } 8 9 return -1 10 } 11 }
132 ms
1 class Solution { 2 func peakIndexInMountainArray(_ A: [Int]) -> Int { 3 var result = 0 4 var climbing = true 5 if A.count < 3 { 6 return result 7 } 8 for i in 1..<A.count { 9 if climbing { 10 if A[i-1] < A[i] && A[i] > result { 11 result = i 12 } else if A[i-1] >= A[i] { 13 climbing = false 14 } 15 } else { 16 if A[i-1] < A[i] { 17 result = -1 18 } 19 } 20 } 21 return result 22 } 23 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了