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

【LeetCode】2552. 统计上升四元组

给你一个长度为 n 下标从 0 开始的整数数组 nums ,它包含 1 到 n 的所有数字,请你返回上升四元组的数目。

如果一个四元组 (i, j, k, l) 满足以下条件,我们称它是上升的:

0 <= i < j < k < l < n 且
nums[i] < nums[k] < nums[j] < nums[l] 。


思路:1324型不等式,需要先确定一组关系以降低复杂度。这里确定32,及j与k。那么可以转换为对于j,遍历(0,n-1)。对于k遍历(n-1,j+1),如果nums[j]<nums[k],那么此处可以作为l,则sub++。如果nums[j]>nums[k],那么ans+=prev[nums[k]*sub。prev[x]为小于x的数量。对于每一个nums[j],将prev[nums[j]+1, n]加一即可。

class Solution {
    public long countQuadruplets(int[] nums) {
        /**
        i,j,k,l
        nums[i]<nums[k]<nums[j]<nums[l]
        nums[i]<nums[k]
        nums[j]<nums[l]
        j<k约束
        性质, ans = prev[x] * suf
        prev[x]指小于x的数量, 
        for j in (0,n)
            for k in (n-1, j)
         */
        int n = nums.length;
        long ans = 0;
        
        int[] prev = new int[n+1];
        for(int j=0; j<n; j++) {

            // 每次更新suf
            int suf = 0;
            for(int k=n-1; k>j; k--) {
                if(nums[j]>nums[k]) {
                    // 因为nums[i]<nums[k]
                    ans += prev[nums[k]] * suf;
                } else {
                    // k更大,此处可以作为l
                    suf ++;
                }
            }
            for(int x=nums[j]+1; x<=n; x++) {
                prev[x] ++;
            }
        }

        return ans;
    }
}

http://www.kler.cn/news/303608.html

相关文章:

  • C++学习,多态纯虚函数
  • 灵雀云DevOps:加速应用交付,点燃业务创新引擎
  • chapter11 常用类和基础API 知识点总结Note
  • Git常用命令详解
  • uniapp H5 打开地图 并选中标记点
  • sqlguna靶场get shell
  • 高级 Python Web 应用中的身份验证与授权机制解析
  • STM32常用数据采集滤波算法
  • Java重修笔记 第五十四天 坦克大战(三)事件处理机制
  • 上海市计算机学会竞赛平台2024年7月月赛丙组池塘计数
  • SEAFARING靶场漏洞攻略
  • AnyGPT:多模态语言模型,任意处理语音、图像和音乐
  • 【深度学习】【图像分类】【OnnxRuntime】【Python】VggNet模型部署
  • 项目进度一
  • 数据库常规操作
  • vue引入三维模型
  • 【绿盟科技盟管家-注册/登录安全分析报告】
  • 2024CCPC网络预选赛
  • raksmart大带宽服务器租用
  • mycat双主高可用架构部署-MySQL5.7环境部署第一台
  • 「漏洞复现」紫光电子档案管理系统 selectFileRemote SQL注入漏洞
  • TestCraft - GPT支持的测试想法生成器和自动化测试生成器
  • 前端使用COS上传文件
  • 为什么要进行MySQL增量备份?
  • 【数据结构和算法实践-树-LeetCode112-路径总和】
  • 力扣: 四数相加II
  • Linux安装管理多版本JDK
  • CSS Clip-Path:重塑元素边界的艺术
  • mysql慢sql问题修复
  • 计算机毕业设计 自习室座位预约系统的设计与实现 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试