LeetCode[1508]子数组和排序后的区间和

news2024/10/7 8:22:35

难度:Medium

题目:

给你一个数组 nums ,它包含 n 个正整数。你需要计算所有非空连续子数组的和,并将它们按升序排序,得到一个新的包含 n * (n + 1) / 2 个数字的数组。

请你返回在新数组中下标为 left 到 right (下标从 1 开始)的所有数字和(包括左右端点)。由于答案可能很大,请你将它对 10^9 + 7 取模后返回。


示例 1:

输入:nums = [1,2,3,4], n = 4, left = 1, right = 5
输出:13 
解释:所有的子数组和为 1, 3, 6, 10, 2, 5, 9, 3, 7, 4 。将它们升序排序后,我们得到新的数组 [1, 2, 3, 3, 4, 5, 6, 7, 9, 10] 。下标从 le = 1 到 ri = 5 的和为 1 + 2 + 3 + 3 + 4 = 13 。

 示例 2:

输入:nums = [1,2,3,4], n = 4, left = 3, right = 4
输出:6
解释:给定数组与示例 1 一样,所以新数组为 [1, 2, 3, 3, 4, 5, 6, 7, 9, 10] 。下标从 le = 3 到 ri = 4 的和为 3 + 3 = 6 。

 示例 3:

输入:nums = [1,2,3,4], n = 4, left = 1, right = 10
输出:50

提示:

  • 1 <= nums.length <= 10^3
  • nums.length == n
  • 1 <= nums[i] <= 100
  • 1 <= left <= right <= n * (n + 1) / 2

 Related Topics

  • 数组
  • 双指针
  • 二分查找
  • 排序

重点!!!解题思路

第一步:

明确解题手段: 根据题意来看,是根据每个值向后模拟出一个前缀和。再分别看这几个模拟之后数组可以看出都是升序排序,那么思路就很清晰了,可以使用归并排序中的多路归并到一路的解法。

第二步:

 解题思路就是:知道了使用多路归一路的解法,那么就可以使用堆来解决,每次添加每个升序数组的第一个值,在小顶堆中进行操作,直到找到left到right中的值 即可

源码+讲解:

    class Solution {   
        class Data {  //自定义一个内部类辅助操作
            int i, j, val;  //i,j代表数组中的下标值,val代表当前要模拟的值

            public Data(int i, int j, int val) {
                this.i = i;
                this.j = j;
                this.val = val;
            }
        }
        public int rangeSum(int[] nums, int n, int left, int right) {
            PriorityQueue<Data> p = new PriorityQueue<>(new Comparator<Data>() {
                @Override
                public int compare(Data o1, Data o2) {  //小顶堆排序规则
                    return o1.val - o2.val;
                }
            });
            for (int i = 0; i < nums.length; i++) p.offer(new Data(i, i, nums[i]));  //把几个升序数组的头部添加进来
            int ans = 0, mod = (int) 1e9 + 7;
            for (int i = 1; i <= right; i++) {  //一直poll到right的位置
                Data cur = p.poll();
                if (i >= left) ans = (ans + cur.val) % mod;  //如果目前下标符合left 那么就添加到结果集中
                if (cur.j + 1 < n) p.offer(new Data(cur.i, cur.j + 1, cur.val + nums[cur.j + 1]));  //如果目前下标还没有走到数组结尾,那么就继续操作
            }
            return ans;
        }
    }

 运行结果:

如果您还有什么疑问或解答有问题,可在下方评论,我会及时回复。

系列持续更新中,点个订阅吧,喜欢练习算法那就点个攒吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778916.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

某康视频插件无法在chrome正常播放解决方法

使用低版本谷歌浏览器&#xff08;94版本以下&#xff09; 在谷歌浏览器中地址栏输入 chrome://flags/ &#xff0c; 搜索secure&#xff0c;找到 Allow invalid certificates for resources loaded from localhost&#xff08;启用它&#xff09;&#xff0c;找到Block insecu…

JavaSwing+MySQL的物业管理系统

点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/88081588?spm1001.2014.3001.5503 JDK1.8、MySQL5.7 《数据库应用系统》课程设计报告 题 目: 居民小区物业管理系统的设计与实现 目录 1 引言 1 2 系统需求描述 1 2.1 业务需求 1 2.2 …

怎么使用css写可视化常见的背景和元素

4个角的背景加背景颜色 .line-bg {--width: 2px;--height: 10px;--color: v-bind(colorConfig.visial.normal);background-color: rgba(255, 255, 255, 0.05);background-image: linear-gradient(to bottom, var(--color) var(--width), transparent 1px),linear-gradient(to r…

行云创新 CloudOS 助力上汽乘用车企业云原生IT架构变革

近日&#xff0c;在2023架构可持续未来峰会成都制造业分会场上&#xff0c;上海汽车集团股份有限公司乘用车公司基础架构部主管茹洋带来了议题为《云原生时代上汽乘用车企业IT架构变革和实践》的精彩演讲。他从云原生对于企业IT架构的意义、企业IT架构变革的必要性入手&#xf…

智能优化算法:塘鹅优化算法-附代码

智能优化算法&#xff1a;塘鹅优化算法 文章目录 智能优化算法&#xff1a;塘鹅优化算法1.塘鹅优化算法1.1种群初始化1.2探索阶段1.3开发阶段 2.实验结果3.参考文献4.Matlab5.python 摘要&#xff1a;塘 鹅 优 化 算 法&#xff08;Gannet Optimization Algorithm&#xff0c; …

Flutter、Android Studio 安装详细步骤以及常错解决

目录 一、前言 二、介绍 三、安装 (一&#xff09;、安装Flutter SDK 1&#xff09;双击文件夹&#xff0c;打开之后就是这样&#xff1a;​编辑 2&#xff09;双击此文件&#xff1a;​编辑 3&#xff09;此过程问题&#xff1a; (二&#xff09;、配置 Flutter SDK 环…

概率论和随机过程的学习和整理--番外16,N合1的合成问题的求平均个数,次数,阶数

目录 1 问题 2 用条件期望&#xff0c;求合成的次数 2.1 思路1 2.2 思路2 3 用条件期望&#xff0c;求合成的个数 3.1 令X表示用材料1往上合成时&#xff0c;合成材料2的个数 3.2 令Y表示用材料1往上合成时&#xff0c;合成材料3的个数 4 用条件期望&#xff0c;求合成…

【100天精通python】Day10:函数的创建和调用,参数传递,返回值,变量作用域以及匿名函数

目录 1. 函数的创建和调用 1.1 函数的创建 1.2 调用函数 2 参数传递 2.1 传递方式 2.2 形参和实参 2.3 位置参数 2.4 关键字参数 2.5 可变参数 2.6 为参数设置默认值 3 返回值 4 变量的作用域 4.1 局部变量 4.2 嵌套变量 4.3 全局变量 5 匿名函数&#xff0…

WAF/Web应用安全(拦截恶意非法请求)

Web 应用防火墙&#xff08;Web Application Firewall&#xff0c; WAF&#xff09;通过对 HTTP(S) 请求进行检测&#xff0c;识别并阻断 SQL 注入、跨站脚本攻击、跨站请求伪造等攻击&#xff0c;保护 Web 服务安全稳定。 Web 安全是所有互联网应用必须具备的功能&#xff0c…

OpenCV for Python 实战(一):获取图片拍摄GPS地址并自动添加水印

Hello 我们在OpenCV每天的基础博客当中已经更新了很多了&#xff0c;那么今天我们就来结合前几天的内容。做一个获取属性然后添加对应属性的水印。那让我们赶快开始吧~ 文章目录 图片EXIFPython 获取EXIFexifread库使用方法转换成文字地址 添加水印cv2.putText() 每日总结 图片…

数据可视化——绘制带有时间线的柱状图

文章目录 前言如何绘制柱状图添加时间线根据提供的数据绘制动态柱状图读取并删除无用数据将数据转换为字典创建柱状图并添加到时间线中配置选项并生成带有数据的折线图 前言 我们已经学习了使用 pyecharts 包中的模块和相应的方法绘制了折线图和地图&#xff0c;那么今天我将为…

Visual Studio Code安装详细教程

win电脑可以打开该网址 vs官方下载网站 点击这里免费下载 下载下来是一个安装程序&#xff0c;直接以管理员身份运行即可 我同意安装&#xff0c;然后选择D盘的一个空间进行安装 然后点击下一步 安装如图所示勾选&#xff0c;点击下一步 点击安装 等待安装完成即可 打开…

原神盲盒风格:AI绘画Stable Diffusion原神人物公仔实操:核心tag+lora模型汇总

本教程收集于&#xff1a;AIGC从入门到精通教程汇总 在这篇文章中&#xff0c;我们将深入探讨原神盲盒的艺术风格&#xff0c;以及如何运用AI绘画技术&#xff08;Stable Diffusion&#xff09;——来创造原神角色公仔。我们将通过实践操作让读者更好地理解这种技术&#xff0…

Vue中TodoLists案例_底部交互

与上一篇Vue中TodoList案例_底部统计有俩个文件变化了 App.vue&#xff1a;定义了一个方法checkAllTodo&#xff0c;实现全选和取消全选&#xff0c;并将方法传给儿子组件MyFooter <template><div id"root"><div class"todo-container">…

数学建模学习(4):TOPSIS 综合评价模型及编程实战

一、数据总览 需求&#xff1a;我们需要对各个银行进行评价&#xff0c;A-G为银行的各个指标&#xff0c;下面是银行的数据&#xff1a; 二、代码逐行实现 清空代码和变量的指令 clear;clc; 层次分析法 每一行代表一个对象的指标评分 p [8,7,6,8;7,8,8,7];%每一行代表一个…

JDK、JRE、JVM三者之间的关系

总结 JDK包含JRE&#xff0c;JRE包含JVM。 JDK (Java Development Kit)----Java开发工具包&#xff0c;用于Java程序的开发。 JRE (Java Runtime Environment)----Java运行时环境&#xff0c;只能运行.class文件&#xff0c;不能编译。 JVM (Java Virtual Machine)----Java虚拟…

解决 前端显示后端返回的null值为 1的问题

一 、问题描述 一个产品信息&#xff0c;有一个输入框的数据是后端返回回显出来的 但是后端返回这个字段时候&#xff0c;这个字段为空值&#xff0c;在后端就根本在data中没有返回这个字段任何信息 如返回的data {name : 123,age: 18} 因为age 为空&#xff0c;实际后端返回…

云原生|kubernetes|kubernetes集群部署神器kubekey安装部署高可用k8s集群(半离线形式)

前言&#xff1a; 云原生|kubernetes|kubernetes集群部署神器kubekey的初步使用&#xff08;centos7下的kubekey使用&#xff09;_晚风_END的博客-CSDN博客 前面利用kubekey部署了一个简单的非高可用&#xff0c;etcd单实例的kubernetes集群&#xff0c;经过研究&#xff0c;…

pt19盒模型布局

CSS 盒模型 内容尺寸overflow(占用内容框) 一般情况下&#xff0c;为元素设置width/height&#xff0c;指定的是内容框的大小 内容溢出&#xff1a;内容超出元素的尺寸范围&#xff0c;称为溢出。默认情况下溢出部分仍然可见&#xff0c;可以使用overflow调整溢出部分的显示…

【枚举】CF1833 D

Problem - D - Codeforces 题意&#xff1a; 给定一个序列&#xff0c;让你找一个区间&#xff0c;翻转区间内的数&#xff0c;交换前缀和后缀&#xff0c;让结果数组的字典序最大 思路&#xff1a; 观察样例可知&#xff0c;r是可以直接确定的&#xff0c;l是不确定的&…