Appearance
Perfect Peak of Array
Problem Description
Given an integer array A of size N.
You need to check that whether there exist a element which is strictly greater than all the elements on left of it and strictly smaller than all the elements on right of it.
If it exists return 1 else return 0.
NOTE:
- Do not consider the corner elements i.e A[0] and A[N-1] as the answer.
Problem Constraints
3 <= N <= 10^5
1 <= A[i] <= 10^9
Input Format
First and only argument is an integer array A containing N integers.
Output Format
Return 1 if there exist a element that is strictly greater than all the elements on left of it and strictly smaller than all the elements on right of it else return 0.
Example Input
Input 1:
A = [5, 1, 4, 3, 6, 8, 10, 7, 9]
Input 2:
A = [5, 1, 4, 4]
Example Output
Output 1:
1
Output 2:
0
Example Explanation
Explanation 1:
A[4] = 6 is the element we are looking for.
All elements on left of A[4] are smaller than it and all elements on right are greater.
Explanation 2:
No such element exits.
Solution
swift
import Foundation
class Solution {
func perfectPeak(_ A: inout [Int]) -> Int {
var gr = [Int]()
// var sm = [Int]()
var max = Int.min
for (i,v) in A.enumerated() {
if v > max {
gr.append(i)
max = v
}
}
var min = A.last!
for i in (1..<(A.count-1)).reversed() {
if A[i] < min {
min = A[i]
while gr.count > 0 && gr.last! > i {
gr.removeLast()
}
if gr.count == 0 {
return 0
}
if gr.last! == i {
return 1
}
}
}
return 0
// if gr.count < 3 || sm.count < 3{
// return 0
// }
// var i = 1
// var j = 1
// while i < (gr.count-1) && j < (sm.count - 1) {
// let g = gr[i]
// let s = sm[j]
// if g > s {
// j += 1
// } else if g < s{
// i += 1
// } else {
// return 1
// }
// }
// return 0
}
}