题目链接
分析
分别求出数组的前缀最大值和后缀最小值,遍历进行比较即可
代码实现
class Solution {
public:
int sumOfBeauties(vector<int>& nums) {
int n = nums.size();
vector<int> suf_min(n);
suf_min[n - 1] = nums[n - 1];
for(int i = n - 2; i > 1; --i) {
suf_min[i] = min(suf_min[i + 1], nums[i]);
}
int ans = 0;
int pre_max = nums[0];
for(int i = 1; i < n - 1; ++i) {
if(pre_max < nums[i] && nums[i] < suf_min[i + 1])
ans += 2;
else if(nums[i - 1] < nums[i] && nums[i] < nums[i + 1])
ans++;
pre_max = max(pre_max, nums[i]);
}
return ans;
}
};
复杂度分析
- 时间复杂度:$O(n)$
- 空间复杂度:$O(n)$