原题链接力扣

题目大意:我开始看成连续子段了,写了个递归程序.......

一个数组任选一个子序列,子序列的力量值=最大值平方*最小值。求所有子序列的力量和。

分析过程:如序列长度为n,子序列总数为2的n次幂,显然不可能枚举所有子序列来求解。那么只能锁定子序列最大值和最小值来处理。容易想到先排序,排序后的序列可以取任意ai和aj,那么ai最小值,aj 最大值,i和j之间的元素可以任取,例如i=2,j=6,那么i和j之间有3个其他元素,这3个元素可以任取,因此共有2的3次幂共8种选取方法:(a2,a6) (a2,a3,a6) (a2,a4,a6) (a2,a5,a6)(a2,a3,a4,a6).......。枚举所有i和j,时间复杂度为O(n2)。

这类问题如何继续降低复杂度。一般来说都会存在某种规律,使得下一次的处理能利用上一次的结果,也有写问题存在某种(数学)方法,能直接求得解。本题目通过找规律解决。

假设a1为最小值,那么子序列中必然有a1,此时如果锁定ai为最大值,那么所有满足(a1最小,ai最大)的子序列数量必然ai*ai*a1*pow(2,i-2)。

枚举下最大最小值分别为(i,j)的公式

最大值j\最小值i a1        a2 a3 ...... 总和
a2 a1*a2*a2

(a1)*a2*a2

a3 2a1*a3*a3 a2*a3*a3

(2a1+a2)*a3*a3

a4 4a1*a4*a4 2a2*a4*a4 (4a1+2a2+a3)*a4*a4
a5 8a1*a5*a5 4a2*a5*a5 2a3*a5*a5 ...... (8a1+4a2+2a3+a4)*a5*a5
a6 16a1*a6*a6 8a2*a6*a6 4a3*a6*a6 ......

可以发现规律为当ai为最大值时,其组成所有子序列的力量和为Y[i]*a[i]*a[i],而这个Y[i]可以由Y[i-1]*2+a[i-1]求得。

class Solution {
public:int sumOfPower(vector<int>& nums) {int i,j,r=nums.size()-1,mod=1e9+7;;sort(nums.begin(),nums.end());/**< 排序 */long long ans=0,sum=nums[0];for(i=0;i<=r;i++)/**< 就一个元素序列单独处理 */ans=(ans+1LL*nums[i]*nums[i]%mod*nums[i])%mod;for(i=1;i<=r;i++)/**< 最大值为i的力量和 */{long long temp=1LL*nums[i]*nums[i]%mod;ans=(ans+temp*sum%mod)%mod;sum=(sum*2+nums[i])%mod;/**< i+1的系数 */}return (int)ans;}
};

两个循环综合在一起的写法。

class Solution {
public:int sumOfPower(vector<int>& nums) {int i,j,r=nums.size()-1,mod=1e9+7;;sort(nums.begin(),nums.end());/**< 排序 */long long ans=0,sum=0;for(i=0;i<=r;i++)/**< 最大值为i的力量和 */{long long temp=1LL*nums[i]*nums[i]%mod;ans=(ans+temp*(sum+nums[i])%mod)%mod;sum=(sum*2+nums[i])%mod;/**< i+1的系数 */}return (int)ans;}
};

力扣第 104 场双周赛 2681. 英雄的力量相关推荐

  1. 20220219:力扣第72场双周赛题解

    力扣第72场双周赛 题目 思路与算法 代码实现 写在最后 题目 统计数组中相等且可以被整除的数对 找到和为给定整数的三个连续整数 拆分成最多数目的偶整数之和 统计数组中好三元组数目 思路与算法 前三题 ...

  2. 20210530:力扣第53场双周赛题解

    力扣第53场双周赛题解 题目 思路与算法 代码实现 写在最后 题目 长度为三且各字符不同的子字符串 数组中最大数对和的最小值 矩阵中最大的三个菱形和 思路与算法 长度为三且各字符不同的子字符串:遍历查 ...

  3. 20201023:力扣第37场双周赛(上)

    力扣第37场双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 删除某些元素后的数组均值 网络信号最好的坐标 思路与算法 第二题直接暴力就可以了,计算每个点的所有偏移量存入list,即以(0,0 ...

  4. 以赛促练-力扣第85场双周赛以及第307场周赛

    文章目录 第85场双周赛 T3.字母移位II T4.删除操作后的最大子段和 第307场周赛 T2.最大回文数字 T3.感染二叉树需要的总时间 T4.找出数组的第K大和 第85场双周赛 T1直接暴力枚举 ...

  5. 力扣 第 87 场双周赛 ---心态爆炸场

    第 87 场双周赛 T1 - 模拟 class Solution {public:int q[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, ...

  6. 力扣第 107 场双周赛

    因为打abc打(。・∀・)ノ゙嗨了,忘记cf是10.05了,所以只能去力扣了 A.直接模拟,然后把用过的点记录下次别用就行 class Solution:def maximumNumberOfStri ...

  7. 20211201:力扣第268周双周赛(上)

    力扣第268周双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 两栋颜色不同且距离最远的房子 给植物浇水 思路与算法 双指针遍历即可,维护那个索引最大差值即可. 模拟题,正常情况需要每次走一步 ...

  8. 20210119:力扣第42周双周赛(下)

    力扣第42周双周赛(下) 题目 思路与算法 代码实现 写在最后 题目 修改后的最大二进制字符串 得到连续 K 个 1 的最少相邻交换次数 思路与算法 修改后的最大二进制字符串 这道题的思路很简单,交换 ...

  9. 20210101:力扣第42周双周赛(上)

    力扣第42周双周赛(上) 题目 思路与算法 代码实现 写在最后 题目 无法吃午餐的学生数量 平均等待时间 思路与算法 无法吃午餐的学生数量 本题直接暴力模拟也没问题,但是这应该不是题目的本意,我们可以 ...

最新文章

  1. 通过Nginx,Tomcat访问日志(access log)记录请求耗时
  2. 电脑计算机无法找到脚本文件夹,我的电脑开机为什么出现无法找到脚本呢?
  3. 深度学习核心技术精讲100篇(六十三)-【CNN】一文详细讲解前因后果
  4. 【技术综述】人脸风格化核心技术与数据集总结
  5. Match Points
  6. MySQL--Delete语句别名+LIMIT
  7. .NET 和 Mono 的一点历史
  8. Asp.Net中WebForm与MVC,Web API模式对比
  9. Q124:PBRT-V3,“路径追踪”积分器(14.5章节)
  10. 最新版酒店小程序源码
  11. ExtJs 入门教程
  12. Win10 系统通过易升升级后,系统盘空间不足解决办法(个人经历)
  13. 陕西师大计算机考研专业考408嘛,2021考研计算机408考试趋势分析
  14. 实用前端可视化工具库
  15. vue图片压缩不失真_vue中实现图片压缩 file文件的方法
  16. 利用AFD进行播出级的自动幅型比控制
  17. ThingJS 开发使用感悟
  18. CornerStone的使用
  19. linux shell写cgi,shell写cgi脚本
  20. 面试 | 3.5 万字总结 Java 后台研发常见面试题

热门文章

  1. sp_renamedb
  2. EMC | 静电放电抗扰度试验与整改
  3. (抄送列表,年会抽奖)笔试强训
  4. 完美支持4.3.1固件 360手机卫士iPhone版
  5. 十大“阵亡”创始人:100种死法,承包了2018所有的绝望
  6. 一套手机点餐收银系统源码,系统功能完善、页面美观,开源分享!
  7. Win32 .Net QA
  8. java的Overriding和Overloading
  9. html锁别人电脑的程序,教大家怎么把电脑里的个别软件锁住
  10. 跪着看完这14个机械动图