QQ个性网:专注于分享免费的QQ个性内容

关于我们| 网站公告| 广告服务| 联系我们| 网站地图

搜索
编程 JavaScript Java C++ Python SQL C Io ML COBOL Racket APL OCaml ABC Sed Bash Visual Basic Modula-2 Logo Delphi IDL Groovy Julia REXX Chapel X10 Forth Eiffel C# Go Rust PHP Swift Kotlin R Dart Perl Ruby TypeScript MATLAB Shell Lua Scala Objective-C F# Haskell Elixir Lisp Prolog Ada Fortran Erlang Scheme Smalltalk ABAP D ActionScript Tcl AWK IDL J PostScript IDL PL/SQL PowerShell

Java经典算法:具有上限的子数组数

日期:2025/04/05 12:38来源:未知 人气:52

导读:给定一个由正整数组成的数组A,以及两个正整数L和R(L <= R)。返回(连续的非空)子数组的数量,以使该子数组中最大数组元素的值至少为L,至多为R。示例:输入:A = [2,1,4,3]L = 2R = 3输出:3说明:有三个满足要求的子阵列:[2],[2、1],[3]。Java解决方案此问题的边界是每个元素的总和,而不是总和。很容易误解这个问题,因为有很多与总和有关的......

给定一个由正整数组成的数组A,以及两个正整数L和R(L <= R)。

返回(连续的非空)子数组的数量,以使该子数组中最大数组元素的值至少为L,至多为R。

示例:

输入:

A = [2,1,4,3]

L = 2

R = 3

输出:3

说明:有三个满足要求的子阵列:[2],[2、1],[3]。

Java解决方案

此问题的边界是每个元素的总和,而不是总和。很容易误解这个问题,因为有很多与总和有关的问题。

给定样本[2,1,4,3]中的数组,我们可以将其转换为数组[0,0,1,0],这意味着如果元素在边界内,则为0。子数组的数量。

给定一个数组,子数组的总数遵循以下模式:

[0]-> 1

[0,0]-> 2 + 1(单元素子数组+ 2元素子数组)

[0,0,0]-> 3 + 2 + 1

[0,0,0,0]-> 4 + 3 + 2 + 1

因此,解决方案是R的countBelowBoundary-(L-1)的countBelowBoundary。

publicintnumSubarrayBoundedMax(int[] A, int L, int R) {

returncountBelowBoundary(A, R)-countBelowBoundary(A,L-1);}

publicintcountBelowBoundary(int[] A, int bound){

intcount = 0;

inttemp = 0;

for(inta: A){

if(a<=bound){

temp = temp +1;

count += temp;

}else{

temp = 0;

}

}

returncount;}

时间为O(N),空间为O(1)。

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

关于我们|网站公告|广告服务|联系我们| 网站地图

Copyright © 2002-2023 某某QQ个性网 版权所有 | 备案号:粤ICP备xxxxxxxx号

声明: 本站非腾讯QQ官方网站 所有软件和文章来自互联网 如有异议 请与本站联系 本站为非赢利性网站 不接受任何赞助和广告