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);
}
执行结果如下:
左神java代码
2022-09-05:作为国王的统治者,你有一支巫师军队听你指挥。 :给你一个下标从 0 开始的整数数组 strength , 其中 strength[i] 表示第 i 位巫师的力量值。 对于连续的一相关推荐
- 543、RabbitMQ详细入门教程系列 -【Confirm与Mandatory】 2022.09.05
目录 一.前言概述 二.SpringAMQP配置Confirm 2.1 Connection设置 2.2 template设置 2.3 Confirm实现 三.SpringAMQP配置ManDator ...
- 544、RabbitMQ详细入门教程系列 -【手动消费确认】 2022.09.05
目录 一.前言概述 二.配置实现 2.1 XML配置 2.2 MessageListener实现 三.消息预取 四.并发消费 五.参考链接 一.前言概述 RabbitMQ(四) --消费者Consum ...
- [C] 跨平台使用Intrinsic函数范例3——使用MMX、SSE2指令集 处理 32位整数数组求和...
作者:zyl910. 本文面对对SSE等SIMD指令集有一定基础的读者,以32位整数数组求和为例演示了如何跨平台使用MMX.SSE2指令集.支持vc.gcc编译器,在Windows.Linux.Mac ...
- 2022.09.29 周四
2022.09.29 周四 回顾 元组 容器:(数据1,数据2,数据3,--) 不可变的:有序的 元素:没有要求 集合 容器:{数据1,数据2,数据3,--} 可变的:无序的: 元素:不可变的数据:唯 ...
- 2022.09 青少年软件编程(图形化) 等级考试试卷(四级)
2022.09 青少年软件编程(图形化) 等级考试试卷(四级) 分数: 100 题数: 29 一. 单选题(共 15 题, 共 30 分) 1.运行下列程序,说法正确的是?() A.列表中的数字全部小 ...
- 【2022.09.04】关于升级打怪学编程活动的通知
把电子学会全国青少年软件编程等级考试作为游戏的关卡,带着小朋友们升级打怪. 升级打怪计划 每周日晚20:00,我在腾讯会议中进行直播答疑,解决小朋友们本周遇到的编程问题,辅助小朋友们提升编程的技能. ...
- 2022.09 青少年Python等级考试(六级) 编程题部分
2022.09 青少年Python等级考试 编程题部分(共3题,共30分) 36.小明编写一个类实现设置马的品种.年龄.性别及速度,输出相应的语句,请补全代码. 如下代码输出结果为"一匹 ...
- 2022.09 青少年Python等级考试(六级) 选择题部分
2022.09 青少年Python等级考试(六级) 选择题部分 一.单选题(共25题,共50分) 1.以下关于Python二维数据的描述中,错误的是?( A ) A. 表格数据属于二维数据,由整数索引 ...
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
最新文章
- 知方可补不足~SQL中的count命令的一些优化措施(百万以上数据明显)
- 日志切割之Logrotate
- vant 下拉框样式_使用 Vue 的 Vant.js List 列表组件实现无限下拉
- python入门之函数调用第二关_Python入门之函数调用——第2关:函数正确调用 - 得到想要的结果...
- php-学通PHP的24堂课-设置PHP的系统当前时间
- 调参心得:超参数优化之旅
- os.system 获取打印值_react获取触发元素的属性 e.target.dataset
- ImageJ如何获取图片RGB强度和灰度值
- 种草平台--持续更新
- R语言中predict函数之logistic建模
- 关于组件之间使用provide和inject传值
- CAD参数绘制文字(网页版)
- html平板电脑打不开,苹果平板电脑浏览器打不开网页
- 颜色直方图, HSV直方图, histogram bins
- 学生积分管理系统改进-python
- openssl 自制国密证书
- 把 html标签转化为 html标签代码
- JUST技术:当我停留时我在干什么
- 华硕B85M-V PLUS 刷NVME协议BIOS
- 0403分部积分法-不定积分