当前位置: 首页 > article >正文

力扣(leetcode)每日一题 2012 数组美丽值求和

2012. 数组美丽值求和 - 力扣(LeetCode)

题目

给你一个下标从 0 开始的整数数组 nums 。对于每个下标 i1 <= 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 就是比左边的都大,比右边的都小
需要两个辅助数组,分别记录
从左到右的最大。
从右边到左的最小。

解法一

java

public static int sumOfBeauties(int[] nums) {  
    if (nums.length < 2) {  
        return 0;  
    }  
    int length = nums.length;  
    int[] prefixMax = new int[length];  
    int[] subfixMin = new int[length];  
    prefixMax[0] = nums[0];  
    for (int i = nums.length - 1; i >= 0; i--) {  
        if (i == nums.length - 1) {  
            subfixMin[i] = nums[i];  
        } else {  
            subfixMin[i] = Math.min(subfixMin[i + 1], nums[i]);  
        }  
    }  
    int count = 0;  
    for (int i = 1; i < nums.length - 1; i++) {  
        prefixMax[i] = Math.max(prefixMax[i - 1], nums[i]);  
        if (nums[i] > prefixMax[i - 1] && nums[i] < subfixMin[i + 1]) {  
            count += 2;  
        } else if (nums[i] > nums[i - 1] && nums[i] < nums[i + 1]) {  
            count += 1;  
        }  
    }  
    return count;  
}

python


  
  
class Solution:  
    def sumOfBeauties(self, nums: List[int]) -> int:  
        n = len(nums)  
        suffix_min = [0] * n  
        prefix_max = [0] * n  
        suffix_min[n - 1] = nums[n - 1]  
        for i in range(n - 2, 1, -1):  
            suffix_min[i] = min(suffix_min[i + 1], nums[i])  
        count = 0  
        prefix_max[0] = nums[0]  
        for i in range(1, n - 1, 1):  
            if prefix_max[i - 1] < nums[i] < suffix_min[i + 1]:  
                count += 2  
            elif nums[i - 1] < nums[i] < nums[i + 1]:  
                count += 1  
            prefix_max[i] = max(prefix_max[i - 1], nums[i])  
        return count  
  
  
a = Solution().sumOfBeauties([1, 2, 3])  
print(a)

解法二 优化数组的空间

python


  
class Solution2:  
    def sumOfBeauties(self, nums: List[int]) -> int:  
        n = len(nums)  
        suffix_min = [0] * n  
        suffix_min[n - 1] = nums[n - 1]  
        for i in range(n - 2, 1, -1):  
            suffix_min[i] = min(suffix_min[i + 1], nums[i])  
        count = 0  
        prefix_max = nums[0]  
        for i in range(1, n - 1, 1):  
            if prefix_max < nums[i] < suffix_min[i + 1]:  
                count += 2  
            elif nums[i - 1] < nums[i] < nums[i + 1]:  
                count += 1  
            prefix_max = max(prefix_max, nums[i])  
        return count  
  
  
a = Solution2().sumOfBeauties([1, 2, 3])  
print(a)

总结

考点suffix/prefix arrays


http://www.kler.cn/a/581472.html

相关文章:

  • C++跨平台开发环境搭建全指南:工具链选型与性能优化实战
  • 三级缓存架构
  • 深度生成模型(六)——GAN 简单项目实战 StyleGAN on CelebA
  • 全网最详解答OSPF基础
  • FIWARE:开源的物联网平台,支持设备虚拟化和数据管理
  • 用 Vue 3.5 TypeScript 做了一个日期选择器(改进版)
  • Postman安装及使用教程
  • VScode:运行程序停止后,频繁出现终端进程被终止
  • HTML 学习路线图
  • 【反无人机目标检测数据集】空对空视觉检测微型无人机:深度学习的实验评估
  • PCDN与边缘计算的完美结合:打造低延迟、高可靠的物联网应用
  • Excel·VBA江西省预算一体化工资表一键处理
  • 火绒企业版V2.0全面支持Linux与国产化系统!免费试用助力国产化终端安全升级
  • 最简单圆形进度条实现CSS+javascript,两端带圆弧
  • vue3自定义指令实现输入框值范围大小限制
  • Spring AI 1.0.0 M6新特性MCP
  • yolov8自定义实例分割
  • 清华大学出品《DeepSeek从入门到精通》超详细使用手册pdf
  • React学习笔记14
  • 从零构建 KNN 分类: sklearn 与自定义实现对比