Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >LeetCode 891. 子序列宽度之和(数学)

LeetCode 891. 子序列宽度之和(数学)

作者头像
Michael阿明
发布于 2021-09-06 02:03:18
发布于 2021-09-06 02:03:18
37000
代码可运行
举报
运行总次数:0
代码可运行

文章目录

1. 题目

给定一个整数数组 A ,考虑 A 的所有非空子序列。

对于任意序列 S ,设 S 的宽度是 S 的最大元素和最小元素的

返回 A 的所有子序列宽度之和

由于答案可能非常大,请返回答案模 10^9+7。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例:
输入:[2,1,3]
输出:6
解释:
子序列为 [1][2][3][2,1][2,3][1,3][2,1,3] 。
相应的宽度是 0001122 。
这些宽度之和是 6 。
 
提示:
1 <= A.length <= 20000
1 <= A[i] <= 20000

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/sum-of-subsequence-widths 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:

LeetCode 907. 子数组的最小值之和(单调栈)

天池 在线编程 所有子数组之和(排列组合)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int sumSubseqWidths(vector<int> &A) {
        long long ans = 0, mod = 1e9+7;
        long long n = A.size();
        sort(A.begin(), A.end());
        // 每个数作为最小值的时候,右侧有多少种方案 2^(n-i-1);
        // 每个数作为最大值的时候,左侧有多少种方案 2^(i);
        vector<long long> p2(n);
        p2[0] = 1;
        for(int i = 1; i < n; i++)
            p2[i] = (p2[i-1]<<1)%mod;
        for(int i = 0; i < n; ++i)
        {
            ans = (ans + (p2[i]-p2[n-i-1])*A[i])%mod;
        }
        return (ans+mod)%mod;
    }
};

68 ms 26.6 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
图解LeetCode——891. 子序列宽度之和(难度:困难)
给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和 。由于答案可能非常大,请返回对 10^9 + 7 取余 后的结果。
爪哇缪斯
2023/05/10
1640
图解LeetCode——891. 子序列宽度之和(难度:困难)
算法学习笔记-无题
一、各种算法题 1、leetcode第二题:https://leetcode-cn.com/problems/add-two-numbers/ //你可以新创建一个链表,也可以在原有的链表上操作,这里选新创建的链表 //(1)两数相加,最重要的就是考虑进位,每次赋值,记得加上进位; //(2)最后一个数是否为1,取决于最高位是否有进位; //(3)循环条件,只要有一个链表不为空就可以继续进行 //(4)代码如下: ListNode* addTwoNumbers(ListNode* l1, ListNode*
买唯送忧
2021/05/17
3390
LeetCode 1403. 非递增顺序的最小子序列(排序)
给你一个数组 nums,请你从中抽取一个子序列,满足该子序列的元素之和 严格 大于未包含在该子序列中的各元素之和。
Michael阿明
2020/07/13
8460
LeetCode 1818. 绝对差值和(二分查找)
数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|(0 <= i < n)的 总和(下标从 0 开始)。
Michael阿明
2021/09/06
2100
LeetCode 1191. K 次串联后最大子数组之和(前缀和+分类讨论)
举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]。
Michael阿明
2021/09/06
2340
LeetCode 1955. 统计特殊子序列的数目
特殊序列 是由 正整数 个 0 ,紧接着 正整数 个 1 ,最后 正整数 个 2 组成的序列。
Michael阿明
2021/09/06
4390
2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和
我们使用 A 表示当前子序列的宽度,即末尾元素与首元素的差值,使用 B 表示上一个子序列的宽度,即前一次循环中的 A 值。具体计算过程如下:
福大大架构师每日一题
2023/04/29
7370
2023-04-29:一个序列的 宽度 定义为该序列中最大元素和最小元素的差值。 给你一个整数数组 nums ,返回 nums 的所有非空 子序列 的 宽度之和
LeetCode 1940. 排序数组之间的最长公共子序列(二分查找)
给定一个由整数数组组成的数组arrays,其中arrays[i]是严格递增排序的,返回一个表示所有数组之间的最长公共子序列的整数数组。
Michael阿明
2021/09/06
4570
LeetCode 1911. 最大子序列交替和(动态规划)
一个下标从 0 开始的数组的 交替和 定义为 偶数 下标处元素之 和 减去 奇数 下标处元素之 和 。
Michael阿明
2021/09/06
3890
【数据结构运用】单调栈 + 乘法原理 运用题
给定一个整数数组 arr,找到 min(b) 的总和,其中 b 的范围为 arr 的每个(连续)子数组。
宫水三叶的刷题日记
2022/11/01
3840
LeetCode 823. 带因子的二叉树(动态规划)
文章目录 1. 题目 2. 解题 1. 题目 给出一个含有不重复整数元素的数组,每个整数均大于 1。 我们用这些整数来构建二叉树,每个整数可以使用任意次数。 其中:每个非叶结点的值应等于它的两个子结点的值的乘积。 满足条件的二叉树一共有多少个?返回的结果应模除 10 ** 9 + 7。 示例 1: 输入: A = [2, 4] 输出: 3 解释: 我们可以得到这些二叉树: [2], [4], [4, 2, 2] 示例 2: 输入: A = [2, 4, 5, 10] 输出: 7 解释: 我们可以得到这些
Michael阿明
2021/02/19
2820
LeetCode 907. 子数组的最小值之和(单调栈)
给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。
Michael阿明
2021/02/19
7720
天池 在线编程 所有子数组之和(排列组合)
如果nums = [2, 4, 1], 数组所有的子集是 {[2], [4], [1], [2, 4], [4, 1], [2, 4, 1]} 保证返回的结果是int的类型 len(nums) <= 50
Michael阿明
2021/02/19
5420
LeetCode 第 35 场双周赛(216/2839,前7.61%)
全国排名: 216 / 2839,7.61%;全球排名: 585 / 8750,6.70%
Michael阿明
2021/02/19
3670
LeetCode 1856. 子数组最小乘积的最大值(前缀和 + 单调栈)
比方说,数组 [3,2,5] (最小值是 2)的最小乘积为 2 * (3+2+5) = 2 * 10 = 20 。 给你一个正整数数组 nums ,请你返回 nums 任意 非空子数组 的最小乘积 的 最大值 。由于答案可能很大,请你返回答案对 10^9 + 7 取余 的结果。
Michael阿明
2021/09/06
7740
LeetCode笔记:Weekly Contest 222 比赛记录
又是一个悲凉的早上,又是刷新下限的一次比赛,好久没有那么绝望过了,只做出两题,甚至一度差点以为只能做出一题,最终排名国内632/3117,世界排名1835/9692,差不多就是前20%的水平,真的是,一度回想起刚开始打比赛时候的绝望。。。
codename_cys
2021/03/26
3340
LeetCode 第 34 场双周赛(385/2842,前13.5%)
全国排名: 385 / 2842,13.5%;全球排名: 1149 / 10140,11.3%
Michael阿明
2021/02/19
3150
LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)
请你统计并返回 nums 中能满足其最小元素与最大元素的 和 小于或等于 target 的 非空 子序列的数目。
Michael阿明
2020/07/13
8390
LeetCode 1498. 满足条件的子序列数目(排序+二分查找+快速幂)
LeetCode 1814. 统计一个数组中好对子的数目(哈希)
给你一个数组 nums ,数组中只包含非负整数。 定义 rev(x) 的值为将整数 x 各个数字位反转得到的结果。 比方说 rev(123) = 321 , rev(120) = 21 。我们称满足下面条件的下标对 (i, j) 是 好的 :
Michael阿明
2021/09/06
2850
LeetCode 898. 子数组按位或操作(前缀和思想)
对于每个(连续的)子数组 B = [A[i], A[i+1], ..., A[j]] ( i <= j),我们对 B 中的每个元素进行按位或操作,获得结果 A[i] | A[i+1] | ... | A[j]。
Michael阿明
2021/02/19
4490
推荐阅读
相关推荐
图解LeetCode——891. 子序列宽度之和(难度:困难)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验