【LetMeFly】2951.找出峰值:模擬(遍歷)
力扣題目鏈接:https://leetcode.cn/problems/find-the-peaks/
給你一個下標從 0 開始的數組 mountain
。你的任務是找出數組?mountain
中的所有 峰值。
以數組形式返回給定數組中 峰值 的下標,順序不限 。
注意:
- 峰值 是指一個嚴格大于其相鄰元素的元素。
- 數組的第一個和最后一個元素 不 是峰值。
?
示例 1:
輸入:mountain = [2,4,4] 輸出:[] 解釋:mountain[0] 和 mountain[2] 不可能是峰值,因為它們是數組的第一個和最后一個元素。 mountain[1] 也不可能是峰值,因為它不嚴格大于 mountain[2] 。 因此,答案為 [] 。
示例 2:
輸入:mountain = [1,4,3,8,5] 輸出:[1,3] 解釋:mountain[0] 和 mountain[4] 不可能是峰值,因為它們是數組的第一個和最后一個元素。 mountain[2] 也不可能是峰值,因為它不嚴格大于 mountain[3] 和 mountain[1] 。 但是 mountain[1] 和 mountain[3] 嚴格大于它們的相鄰元素。 因此,答案是 [1,3] 。
?
提示:
3 <= mountain.length <= 100
1 <= mountain[i] <= 100
解題方法:模擬(遍歷)
用 i i i從 1 1 1到 m o u n t a i n . l e n g t h ? 1 mountain.length - 1 mountain.length?1進行枚舉,如果 m o u n t a i n [ i ] > m o u n t a i n [ i ? 1 ] mountain[i] \gt mountain[i - 1] mountain[i]>mountain[i?1]且 m o u n t a i n [ i ] > m o u n t a i n [ i + 1 ] mountain[i]\gt mountain[i + 1] mountain[i]>mountain[i+1],就將 i i i添加到答案數組中。
小Tips: 將 i i i添加到答案數組中的同時,可以將 i + + i++ i++(因為下一個一定不是“峰值”元素)。
- 時間復雜度 O ( m o u n t a i n . l e n g t h ) O(mountain.length) O(mountain.length)
- 空間復雜度 O ( 1 ) O(1) O(1)
AC代碼
C++
class Solution {
public:vector<int> findPeaks(vector<int>& mountain) {vector<int> ans;for (int i = 1; i < mountain.size() - 1; i++) {if (mountain[i] > mountain[i - 1] && mountain[i] > mountain[i + 1]) {ans.push_back(i);i++;}}return ans;}
};
Go
// package mainfunc findPeaks(mountain []int) []int {ans := make([]int, 0)for i := 1; i < len(mountain) - 1; i++ {if mountain[i] > mountain[i - 1] && mountain[i] > mountain[i + 1] {ans = append(ans, i)i++}}return ans
}
Java
// import java.util.ArrayList;
// import java.util.List;class Solution {public List<Integer> findPeaks(int[] mountain) {List<Integer> ans = new ArrayList<>();for (int i = 1; i < mountain.length - 1; i++) {if (mountain[i] > mountain[i - 1] && mountain[i] > mountain[i + 1]) {ans.add(i);i++;}}return ans;}
}
Python
# from typing import Listclass Solution:def findPeaks(self, mountain: List[int]) -> List[int]:ans = []for i in range(1, len(mountain) - 1):if mountain[i] > mountain[i - 1] and mountain[i] > mountain[i + 1]:ans.append(i)return ans
同步發文于CSDN和我的個人博客,原創不易,轉載經作者同意后請附上原文鏈接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/139279605