当前位置: 首页 > wzjs >正文

外贸做网站要多久做好搜索大全

外贸做网站要多久做好,搜索大全,弄网站赚钱吗,旧网站怎么做301跳转单调栈型题目贡献法 基本模版 这是数组a中的 首先我们要明白什么叫做贡献,在一个数组b{1,3,5}中,连续包含1的连续子数组为{1},{1,3},{1,3,5},一共有三个,这三个数一共能组成6个连续子数组,而其…

单调栈型题目贡献法

基本模版

这是数组a中的

首先我们要明白什么叫做贡献,在一个数组b={1,3,5}中,连续包含1的连续子数组为{1},{1,3},{1,3,5},一共有三个,这三个数一共能组成6个连续子数组,而其中3个子数组都有1,那么就代表了1的贡献值为3,也就是6*1/2

明白了这个概念我们就好写了,假设a数组中有{1,3,5,4,7},需要求每一个子数组中最小值的和,

我们可以利用上述的贡献法来写,以计算左边界为例,从左到右遍历 arr,同时用某个合适的数据结构维护遍历过的元素,并及时移除无用的元素,这个数据结构就是栈。

  1. 当前遍历到元素 a[i]a[i]

  2. 如果发现 a[i]≤a[j]a[i]≤a[j](其中 a[j]a[j] 是栈顶元素)

  3. 那么对于之后任何比 a[j]a[j] 大的元素 xx,必然也满足 x>a[i]x>a[i]

  4. 由于 a[i]a[i] 比 a[j]a[j] 更靠近后面的元素 xx,所以 a[j]a[j] 将永远不会再被用作边界值

  5. 因此可以直接将 a[j]a[j] 弹出栈(它已经"没有任何作用了")

        这是三次遍历的模版

  1. #include <vector>
    #include <stack>
    using namespace std;class Solution {const int MOD = 1e9 + 7;
    public:int sumSubarrayMins(vector<int>& arr) {int n = arr.size();vector<int> left(n, -1);   // 左边第一个比当前元素小的位置vector<int> right(n, n);    // 右边第一个小于或等于当前元素的位置stack<int> st;// 计算左边界for (int i = 0; i < n; ++i) {while (!st.empty() && arr[st.top()] >= arr[i]) {st.pop();}if (!st.empty()) {left[i] = st.top();}st.push(i);}// 清空栈,准备计算右边界while (!st.empty()) st.pop();// 计算右边界for (int i = n - 1; i >= 0; --i) {while (!st.empty() && arr[st.top()] > arr[i]) {st.pop();}if (!st.empty()) {right[i] = st.top();}st.push(i);}long ans = 0;for (int i = 0; i < n; ++i) {ans += (long)arr[i] * (i - left[i]) * (right[i] - i);ans %= MOD;}return (int)ans;}
    };

    还是一次遍历的模版:
     

    #include <vector>
    #include <stack>
    using namespace std;class Solution {const int MOD = 1e9 + 7;
    public:int sumSubarrayMins(vector<int>& arr) {long ans = 0L;arr.push_back(-1);  // 添加哨兵,确保最终清空栈stack<int> st;st.push(-1);        // 初始化栈底哨兵for (int r = 0; r < arr.size(); ++r) {// 维护单调递增栈while (st.size() > 1 && arr[st.top()] >= arr[r]) {int i = st.top();  // 当前处理的柱子索引st.pop();// 计算贡献值:(i - left_bound) * (right_bound - i) * arr[i]ans += (long) arr[i] * (i - st.top()) * (r - i);ans %= MOD;  // 防止溢出}st.push(r);}arr.pop_back();  // 恢复原数组(可选)return (int) ans;}
    };

典型例题:

907. 子数组的最小值之和 - 力扣(LeetCode)

本文参考了力扣的灵山爱抚茶的题单分享|【算法题单】单调栈(矩形面积/贡献法/最小字典序)- 讨论 - 力扣(LeetCode)

http://www.dtcms.com/wzjs/21501.html

相关文章:

  • WordPress来必力seo搜索引擎优化兴盛优选
  • 中天建设中瑞物资网站营销策划方案
  • 灵璧做网站广告联盟有哪些平台
  • 在菲律宾做网络网站犯法吗国际新闻最新消息美国
  • 电子商务主要就业方向seoul是什么国家
  • 新乡网络科技有限公司seo网站优化技术
  • 校园二手网站开发seo诊断站长
  • tinkphp5网站开发广告软文范例200字
  • 轻量级网站开发品牌推广的方式
  • 网站数据分析案例百度福州分公司
  • wordpress新闻资讯模块如何使用独立站谷歌seo
  • 绿色网站模板百度自动点击器
  • wordpress 菜单 外链seo站长工具 论坛
  • 域名备案了 怎么建设网站百度经验app下载
  • iis端口相同不同网站建设怎么搜索关键词
  • wordpress怎么上传文件抖音seo怎么做
  • 用enfold做的网站什么是网站外链
  • 贵阳市住房城乡建设局八大员网站360优化大师旧版本
  • 丹阳是哪里福州短视频seo公司
  • 男人和女人在床上做那个网站宁海关键词优化怎么优化
  • 网站建设选择北京华网天下北京seo服务销售
  • 做可以上传文件的网站广告接单平台app
  • 做网站视频教程chrome手机版
  • 301wordpress汕头seo优化公司
  • 网站如何做下载链接百度免费打开
  • 宁阳网站建设价格周口网站seo
  • 做网站技术服务费属于什么科目itmc平台seo优化关键词个数
  • java动态网站开发心得深圳网络推广平台
  • 网站建设行业导航站点河南网站建设定制
  • 如何在网站做宣传汽车网站建设方案