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

力扣(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

相关文章:

  • Linux 磁盘和文件系统管理
  • SpringMVC 基本概念与代码示例
  • 数据结构之线性表
  • Django-ORM-prefetch_related
  • 排序 --- 快速排序
  • 网络配置与pip工具安装
  • 文件上传漏洞 upload-labs靶场
  • 开源数字人模型Heygem
  • 【学习笔记】《逆向工程核心原理》02.小段标记法、IA-32寄存器、栈、abex‘crackme、栈帧
  • 说一下spring的事务隔离级别?
  • 爱可以传递,幸福可以具象化
  • 基于SpringBoot的“体育购物商城”的设计与实现(源码+数据库+文档+PPT)
  • 从零开始 | C语言基础刷题DAY1
  • C++跨平台开发环境搭建全指南:工具链选型与性能优化实战
  • 信息安全风险管理简述(下):如何进行风险评估
  • 解决 GitHub Pull Request 中 DCO 问题(缺少Signed-off-by行的问题)
  • shell脚本基础
  • 防抖和节流
  • (二)seacmsv9注入管理员账号密码+orderby+limit
  • 炫云云渲染以技术赋能影视视效,打造视觉盛宴!
  • 光明日报:家长孩子共同“息屏”,也要保证高质量陪伴
  • 哪种“网红减肥法”比较靠谱?医学专家和运动专家共同解答
  • 人民日报评外卖平台被约谈:合法规范经营,公平有序竞争
  • 广东早熟荔枝“抢滩”上海,向长三角消费者喊话:包甜,管够
  • 山东省市监局“你点我检”专项抽检:一批次“无抗”鸡蛋农兽药残留超标
  • 讲一个香港儿童的故事,《劏房的天空》获“周庄杯”特等奖