2012. 数组美丽值求和Java
文章发布较早,内容可能过时,阅读注意甄别。
# 题目
给你一个下标从 0 开始的整数数组 nums 。对于每个下标 i(1 <= i <= nums.length - 2),nums[i] 的 美丽值 等于:
- 2,对于所有 0 <= j < i 且 i < k <= nums.length - 1 ,满足 nums[j] < nums[i] < nums[k]
- 1,如果满足 nums[i - 1] < nums[i] < nums[i + 1] ,且不满足前面的条件
- 0,如果上述条件全部不满足 返回符合 1 <= i <= nums.length - 2 的所有 nums[i] 的 美丽值的总和 。
示例 1:
输入:nums = [1,2,3]
输出:2
解释:对于每个符合范围 1 <= i <= 1 的下标 i :
- nums[1] 的美丽值等于 2
示例 2:
输入:nums = [2,4,6,4]
输出:1
解释:对于每个符合范围 1 <= i <= 2 的下标 i :
- nums[1] 的美丽值等于 1
- nums[2] 的美丽值等于 0
示例 3:
输入:nums = [3,2,1]
输出:0
解释:对于每个符合范围 1 <= i <= 1 的下标 i :
- nums[1] 的美丽值等于 0
提示:
- 3 <= nums.length <= 105
- 1 <= nums[i] <= 105
# 思路
Math.max
# 解法
class Solution {
public int sumOfBeauties(int[] nums) {
int len = nums.length;
int lmax[]=new int[len];
lmax[0]=nums[0];
for(int i=1;i<len;++i){
lmax[i]=Math.max(lmax[i-1],nums[i]);
}
int lmin[]=new int[len];
lmin[len-1]=nums[len-1];
for(int i=len-2;i>=0;--i){
lmin[i]=Math.min(lmin[i+1],nums[i]);
}
int sum=0;
for(int i=1;i<len-1;++i){
if(lmax[i-1]<nums[i] && nums[i]<lmin[i+1]){
sum+=2;
}else if(nums[i-1]<nums[i] && nums[i]<nums[i+1]){
sum+=1;
}
}
return sum;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# 总结
- 分析出几种情况,然后分别对各个情况实现