Java 求数组子区间_每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(...

每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(

每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(中等)

每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(中等)

给你一个数组 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

Java 求数组子区间_每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(..._第1张图片

代码如下:

package cn.lbl.face.leetCode;

import java.util.Arrays;

/*

nums = [1,2,3,4] ,4, 1,5

1, 3, 6, 10, 2, 5, 9, 3, 7, 4

*/

public class 子数组和排序后的区间和 {

public static int rangeSum(int[] nums, int n, int left, int right) {

final int MODULO=1000000007;

int sumsLength=n * (n + 1) / 2;

int[] sums = new int[sumsLength];

int index=0;

int sum=0;

for (int i = 0; i

for (int j = i; j

sum+=nums[j];

sums[index++]=sum;

}

sum=0;

}

Arrays.sort(sums);

for (int i = left-1; i

sum=(sum+sums[i])%MODULO;

}

return sum;

}

public static void main(String[] args) {

int sum = rangeSum(new int[]{1, 2, 3, 4}, 4, 1, 5);

System.out.println(sum);

}

}

Java 求数组子区间_每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(..._第2张图片

Java 求数组子区间_每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(..._第3张图片

每日一道java笔试题——leetCode:1508. 子数组和排序后的区间和(相关教程

2020-9-14Java关于==和equals的区别

2020-9-14Java关于==和equals的区别 Java关于==和equals的区别 首先先看下面两段代码 第一段代码 Demo1.class package equals;public class Demo1 {public static void main(String[] args) {Person p1 = new Person(张三,1); Person p2 = new Person(张三,1)

java -- GUI程序设计之基于布局管理器的布局

java -- GUI程序设计之基于布局管理器的布局 创建GUI程序最重要的是界面布局。Swing采用两种布局方式:无布局管理器布局和基于布局管理器的布局。这里主要介绍基于布局管理器的布局。 基于布局管理器的布局首先通过调用容器类(JFrame、JPanel等)的setLayou

Java面向对象编程(OOP)

Java面向对象编程(OOP) 面向对象是抽象出的设计架构,面向过程是具体的执行方法 面向对象编程本质: 以类的方式组织代码,以对象的形式封装数据 三大特性 - 封装 - 继承 - 多态 对象是具体的事物;类是抽象的,是对对象的抽象,是对象的模板 new 是创建对象

[java]两个变量的值进行交换(3种方法)

[java]两个变量的值进行交换(3种方法) class TestExer1 {public static void main(String[] args) {int m=12;int n=5;System.out.println(m:+m+\n+n:+n);System.out.println(这是方法一);//方法一:提供一个临时变量int temp=m;m=n;n=temp;System.out.print

Could not get JDBC Connection; nested exception is java.sql

Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientConnectionException异常处理 org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLNonTransientCo

JAVA数据结构与算法之插入排序

JAVA数据结构与算法之插入排序 最近面临毕业就业,在复习数据结构与算法,为了更好地掌握,加深印象,所以决定写一些博客来知识复现。 温馨提示:这篇博客可能不适合刚学数据结构的新手。 插入排序(Insertion Sorting)的基本思想是:把 n 个待排序的元素看成为

java 注解结合 spring aop 自动输出日志新增拦截器与过滤器

java 注解结合 spring aop 自动输出日志新增拦截器与过滤器 auto-log auto-log 是一款为 java 设计的自动日志监控框架。 前面已经写过了两篇: java 注解结合 spring aop 实现自动输出日志 java 注解结合 spring aop 实现日志 traceId 唯一标识 经过前面2篇的

第三次学JAVA再学不好就吃翔(part117)--单例设计模式

第三次学JAVA再学不好就吃翔(part117)--单例设计模式 学习笔记,仅供参考,有错必纠 文章目录 多线程 单例设计模式 饿汉式 懒汉式 第三种格式 Timer类 线程的五种状态 单例设计模式 单例设计模式,即保证类在内存中只有一个对象,如何保证类在内存中只有一个

你可能感兴趣的:(Java,求数组子区间)