2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一
2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。
:给你一个下标从 0 开始的整数数组 strength ,
其中 strength[i] 表示第 i 位巫师的力量值。
对于连续的一组巫师(也就是这些巫师的力量值是 strength 的 子数组),
总力量 定义为以下两个值的 乘积 :
巫师中 最弱 的能力值 * 组中所有巫师的个人力量值 之和 。
请你返回 所有 巫师组的 总 力量之和。由于答案可能很大,请将答案对 109 + 7 取余 后返回。
子数组 是一个数组里 非空 连续子序列。
答案2022-09-05:
单调栈。
代码用rust编写。代码如下:
fn main() {
let mut arr = vec![1, 3, 1, 2];
let ans = total_strength(&mut arr);
println!("ans = {}", ans);
}
const mod0: i64 = 1000000007;
fn total_strength(arr: &mut Vec<i32>) -> i32 {
let n = arr.len() as i32;
let mut pre_sum = arr[0] as i64;
let mut sum_sum: Vec<i64> = vec![];
for _ in 0..n {
sum_sum.push(0);
}
sum_sum[0] = arr[0] as i64;
for i in 1..n {
pre_sum += arr[i as usize] as i64;
sum_sum[i as usize] = (sum_sum[(i - 1) as usize] + pre_sum) % mod0;
}
let mut stack: Vec<i32> = vec![];
for _ in 0..n {
stack.push(0);
}
let mut size: i32 = 0;
let mut ans: i64 = 0;
for i in 0..n {
while size > 0 && arr[stack[(size - 1) as usize] as usize] >= arr[i as usize] {
size -= 1;
let m = stack[size as usize];
let l = if size > 0 {
stack[(size - 1) as usize]
} else {
-1
};
// l(<当前值,且最近,到不了) m(当前数,做为最小值) i(<=当前数,到不了的!)
ans += magic_sum(arr, &mut sum_sum, l, m, i);
ans %= mod0;
}
stack[size as usize] = i;
size += 1;
}
while size > 0 {
size -= 1;
let m = stack[size as usize];
let l = if size > 0 {
stack[(size - 1) as usize]
} else {
-1
};
ans += magic_sum(arr, &mut sum_sum, l, m, n);
ans %= mod0;
}
ans as i32
}
fn magic_sum(arr: &mut Vec<i32>, sum_sum: &mut Vec<i64>, l: i32, m: i32, r: i32) -> i64 {
let left = (m as i64 - l as i64)
* (sum_sum[(r - 1) as usize]
- if m - 1 >= 0 {
sum_sum[(m - 1) as usize]
} else {
0
}
+ mod0)
% mod0;
let right = (r as i64 - m as i64)
* (if m - 1 >= 0 {
sum_sum[(m - 1) as usize]
} else {
0
} - if l - 1 >= 0 {
sum_sum[(l - 1) as usize]
} else {
0
} + mod0)
% mod0;
return arr[m as usize] as i64 * ((left - right + mod0) % mod0);
}
执行结果如下:

2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一的更多相关文章
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。
描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数.接下来M行,每行包含一个测试数据. 输出 ...
- 输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少
输入一个正整数n,计算出[0,n]这些整数中的二进制数没有连续3个1的数字有多少? 例子:输入数字9,则输出结果位9.因为[0-9]中,只有数字7有连续的三个‘1’出现,别的都没有,所以一共有9个数字 ...
- 风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,
转自:http://www.cnblogs.com/ranranblog/p/5845010.html 风口之下,猪都能飞.当今中国股市牛市,真可谓“错过等七年”. 给你一个回顾历史的机会,已知一支股 ...
- 128 Longest Consecutive Sequence 一个无序整数数组中找到最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度.例如,给出 [100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4].返回所求长度: 4.要求你的算法复杂度为 O ...
- 编写Java程序,中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝参见玉帝,而每一天参
查看本章节 查看作业目录 需求说明: 中国道教中掌管天宫的最高权力统治者是玉帝(Emperor),我们可以认为玉帝是一个单例模式,在这个场景中,有玉帝和天宫的大臣(Minister)们,大臣每天要上朝 ...
- js验证连续两位数字递增或递减和连续三位数字相同
<!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...
- Lucene 简单手记http://www.cnblogs.com/hoojo/archive/2012/09/05/2671678.html
什么是全文检索与全文检索系统? 全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查 ...
- 2020.09.05【NOIP提高组&普及组】模拟赛C组1总结
T1:机器翻译 这一道题是一个很简单的队列题目,我们只要每次维护队列元素数量保持在m以内即可 T2:乌龟棋 这一道题我一开始比赛是暴力枚举(万事先暴力),很明显这个肯定会超时(30分)那么考虑动态规划 ...
- Linux目录文件详解FHS标准(2013.09.05)
Linux 目录配置的依据FHS(Filesystem Hierarchy Standard)标准,将目录分成为四种交互作用的形态: 四种形态的具体解释: 可分享的:可以分享给其他系统挂载使用的目录, ...
随机推荐
- kettle连接oracle
连接oracle 10g 驱动classes12.jar 配置一下三项即可: 1.数据库名称:ip:端口/实例 2.用户名 3.密码
- 【python】yaml文件的读写
[python]yaml文件的读写 冰冷的希望 2020-10-22 18:31:47 442 收藏 1分类专栏: python 文章标签: python yaml版权 python专栏收录该内容67 ...
- 【转载】JMeter如何确定ramp-up时间
转载自:https://blog.csdn.net/wangyanhong123456/article/details/123046451 线程组:用于模拟. 线程属性包含了:线程数.Ramp-Up时 ...
- 深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析
深入理解 Python 虚拟机:复数(complex)的实现原理及源码剖析 在本篇文章当中主要给大家介绍在 cpython 虚拟机当中是如何实现 复数 complex 这个数据类型的,这个数据类型在 ...
- 第六章 C控制语句:分支和跳转
6.1if语句 程序 #define _CRT_SECURE_NO_WARNINGS 1 //coladays.c -- 求出温度低于零度的天数 #include<stdio.h> int ...
- Python学习之爬虫
又被老师要求去搞Python ,曰,,下午回顾了一下Python的基础知识,写了个爬取图片的程序,在此做个分享吧.不喜勿喷 import requests import time from bs4 i ...
- 使用 Netty 实现简单的 RPC 框架
Dubbo 底层使用 Netty 作为网络通信框架.[网络传输问题]:相对于传统的 RPC 或者 RMI 等方式的远程服务过程调用采用了同步阻塞IO,当客户端的并发压力或者网络时延增长之后,同步阻塞 ...
- C#中的数据字典Dictionary
前言 今天上午和往常一样在网上冲浪,看到码甲哥微信群里面在聊一个面试题,比较有意思,这里简单分享下结论中的Dictionary字典. 有50w个int类型的数字,现在需要判断一下里面是否存在重复的数字 ...
- vulnhub靶场之WIRELESS: 1
准备: 攻击机:虚拟机kali.本机win10. 靶机:Wireless: 1,下载地址:https://download.vulnhub.com/wireless/Mystiko-Wireless. ...
- Delete ␍eslint(prettierprettier)错误
Delete ␍eslint(prettier/prettier)错误 今天在用HBuilder开发uniapp项目时,想换成vscode进行开发,但是用vscode打开之前的项目,eslint报错一 ...