算法系列:数组
讲解
class Solution {
func dailyTemperatures(_ temperatures: [Int]) -> [Int] {
var stack = [Int]()
var res = Array(repeating: 0, count: temperatures.count)
stack.append(0)
for i in 1..<temperatures.count {
guard let last = stack.last else { continue }
if temperatures[i] <= temperatures[last] {
stack.append(i)
} else {
while let last = stack.last, temperatures[i] > temperatures[last] {
let top = stack.removeLast()
res[top] = i - top
}
stack.append(i)
}
}
return res
}
}
讲解
class Solution {
func nextGreaterElement(_ nums1: [Int], _ nums2: [Int]) -> [Int] {
var map = Dictionary(uniqueKeysWithValues: nums1.enumerated().map { ($0.element, $0.offset )})
var res = Array(repeating: -1, count: nums1.count)
var stack = [0]
for i in 1..<nums2.count {
while let top = stack.last, nums2[i] > nums2[top] {
stack.removeLast()
if let resIndex = map[nums2[top]] {
res[resIndex] = nums2[i]
}
}
stack.append(i)
}
return res
}
}
讲解
class Solution {
func nextGreaterElements(_ nums: [Int]) -> [Int] {
var res = Array(repeating: -1, count: nums.count)
var stack = [0]
for i in 1..<(2*nums.count) {
while let top = stack.last, nums[i % nums.count] > nums[top] {
res[top] = nums[i % nums.count]
stack.removeLast()
}
stack.append(i % nums.count)
}
return res
}
}