【LeetCode】891.子序列宽度之和
创始人
2024-01-31 03:12:07

**> ## 题目描述

一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。
给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 109 + 7 取余 后的结果。
子序列 定义为从一个数组里删除一些(或者不删除)元素,但不改变剩下元素的顺序得到的数组。例如,[3,6,2,7] 就是数组 [0,3,1,6,2,2,7] 的一个子序列。

示例 1:

输入:nums = [2,1,3]
输出:6
解释:子序列为 [1], [2], [3], [2,1], [2,3], [1,3], [2,1,3] 。
相应的宽度是 0, 0, 0, 1, 1, 2, 2 。
宽度之和是 6 。

示例 2:

输入:nums = [2]
输出:0

提示:

1 <= nums.length <= 105
1 <= nums[i] <= 105

方法一:元素贡献度

class Solution {
public:const int MOD = 1e9+7;int sumSubseqWidths(vector& nums) {// 排序sort(nums.begin(), nums.end());long sum=0;int n=nums.size(), pow2[n];pow2[0]=1;// 预先处理pow2 即二次幂for(int i=1; isum += long(pow2[i] - pow2[n- i -1]) * nums[i];}return (sum % MOD + MOD) % MOD;}
};

方法二:方法一 + 快速幂

class Solution {
public:const int MOD = 1e9+7;// 快速幂(迭代)long pow(long x, int n){long res = 1L;for(; n; n/=2){// n的最低位为1,需要计入贡献if(n % 2)   res = res * x % MOD;x = x * x % MOD;}return res;}int sumSubseqWidths(vector& nums) {// 排序sort(nums.begin(), nums.end());long sum=0L;int n=nums.size();for(int i=0; isum += (pow(2L, i) - pow(2L, n-1-i)) * nums[i];}return (sum % MOD + MOD) % MOD;}
};

心得

  • 这道题本来打算自己做的,一开始还想到了set,但是对于单个元素的操作不方便,最后还是看了题解。
  • 方法一:计算每个元素的贡献度
    1.具体思路看图就很简单了,这里解释一下为什么最终的贡献是 (2i - 2n-1-i) * x,对于元素x而言,作为最大值的时候需要减去最小值,那么在最终表达式展开的时候就有2i * x ,作为最小值的时候会被最大值减去,即-2n-1-i * x,整合一下就得到 (2i - 2n-1-i) * x
    2.另外,通过排序可以快速得知nums[i]的大小顺序;
    3.对于nums[i]的重复问题,无论是把nums[i]当作最大值还是最小值,组合数总取决于某一侧的个数,因此不会对正确答案产生影响。
    4.对于2k操作的重复问题,可以通过预先计算2的k次幂,之后之间查表获得。方法二会针对这个问题进行优化,即快速幂运算
  • 方法二:在方法一上优化,加入快速幂运算
    快速幂的思想分为两种:快速幂+递归快速幂+迭代,具体看参考资料2。方法二采取的是迭代思想。

在这里插入图片描述

参考资料:
[1] 计算每个元素对答案的贡献,多解法(Python/Java/C++/Go)
[2] 【宫水三叶】逐步分析如何求解对展开式的最终贡献
[3] 快速幂运算

相关内容

热门资讯

中国电信人工电话多少 中国电信... 当我们在使用中国移动、中国电信和中国联通提供的电信业务时,可能会发生争议。建议直接向服务提供商投诉,...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
坐月子十大禁忌 坐月子的风俗禁... 前段时间,伊能静发微博说生两个孩子都40多天没洗澡,每天都用药水擦了擦身体。但也强调了,月子怎么做是...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...