今天在qq群了看到了这个题目,觉得用单调栈的解法挺好,可以在o(n)内搞定,特意记录下来

首先明确单调栈的含义:

栈是FILO的,栈的所有操作都是在栈顶进行。

单调性指的是当前栈中存储的元素是严格的递增或者递减。

递增:栈中元素从栈顶到栈底是严格递增的; 递减:栈中元素从栈顶到栈底是严格递减的。

举例:先后入栈的元素假设为9,3,10,1,15。。

考虑递增栈:

初始时,栈为空;

9入栈,栈当前为(9)

3入栈,栈不变

10入栈,9出栈,栈当前为(10)

1入栈,栈不变

15入栈,10出栈,栈当前为(15)

本题目解读:(群中出题者给的例子)

举例:

输入={1, 4, 2, 3}

初始标记都是0={0, 0, 0, 0}

取子区间[1, 4] 最大数是4 所以4做一次标记 标记变为{0, 1, 0, 0}

子区间[1, 3] 最大数还是4 {0, 2, 0 ,0}

[1, 2] {0, 3, 0, 0}

……

这样遍历所有的n*(n-1)/2子区间之后 输出当前标记数组即可
 
解题思路:依次遍历每个数,利用单调栈的思路,找到每个数前面第一个比它大的数,再找到后面第一个比它大的数。然后直接计算当前数对应的结果。。
比如说:{5,1, 4, 2, 3,6}
假设当前遍历到了数4,则前面第一个比它的是5,后面第一比它大的是6,显然,当某个子序列最大值为4时,这个子序列不能包含5和5前面的数,也不能包含6和6后面的数,所以直接考虑区间{1,4,2,3}中4能作为最大数的子序列个数count,count即为4对应的最后结果。
计算公式:假设4前面数的个数为m(这些数均小于4),4后面的个数为n(这n个数均小于4),m和n可以由下标计算得到,于是有:
(1)4不作为序列边界的序列数count1 = m * n;
(2)4作为序列边界的序列数count2 = m + n;
所以可知: count = count1+count2 = m*n+m+n;
 
依次计算每个数的count值,即可在o(n)内解决这道题。
 

有n个数(两两不同),对于这n个数的每个连续子序列,把其中最大的一个数标记一次,问最后每个数被标记次数的更多相关文章

  1. hdu 5072 两两(不)互质个数逆向+容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 求n个不同的数(<=1e5)中有多少组三元组(a, b, c)两两不互质或者两两互质. 逆向求解,把 ...

  2. 在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1)

    题目:在一个数组中,除了两个数外,其余数都是两两成对出现,找出这两个数,要求时间复杂度O(n),空间复杂度O(1) 分析:这道题考察位操作:异或(^),按位与(&),移位操作(>> ...

  3. [LeetCode] Couples Holding Hands 两两握手

    N couples sit in 2N seats arranged in a row and want to hold hands. We want to know the minimum numb ...

  4. Leetcode题库——24.两两交换链表中的节点

    @author: ZZQ @software: PyCharm @file: swapPairs.py @time: 2018/10/20 19:49 说明:给定一个链表,两两交换其中相邻的节点,并返 ...

  5. 【Leetcode链表】两两交换链表中的节点(24)

    题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表.你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 2- ...

  6. Leetcode 24题 两两交换链表中的节点(Swap Nodes in Pairs))Java语言求解

    题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4,你应该返回 ...

  7. 两两组合覆盖测试用例设计工具:PICT

    两两组合覆盖测试用例设计工具:PICT 2016-08-31 目录 1 成对测试简介2 PICT使用  2.1 安装 PICT  2.2 使用PICT3 PICT算法  3.1 准备阶段  3.2 产 ...

  8. [LeetCode] 24. 两两交换链表中的节点

    题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/ 题目描述: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是 ...

  9. [Swift]LeetCode24. 两两交换链表中的节点 | Swap Nodes in Pairs

    Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3 ...

  10. 两两交换链表中的节点(java实现)

    题目: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示例: 给定 1->2->3->4, 你应该返回 ...

随机推荐

  1. matlab画甘特图

    近期为发小论文一直在研究作业调度问题,好不easy把数据搞出来了,结果又被画甘特图给难住了,查了各种资料.anygantt,highchart.Jfree chart等都试了,效果都不咋好.无意中留意 ...

  2. 简单的web三层架构系统【第一版】

    SQLhelper助手类编写: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using Sys ...

  3. ExtJs目录说明

    Ext开发包目录结构说明builds目录为ExtJS压缩后的代码docs目录为ExtJS的文档examples目录中是官方的演示示例locale是多国语言的资源文件, 其中ext - lang - z ...

  4. BZOJ 1601: [Usaco2008 Oct]灌水( MST )

    MST , kruskal 直接跑 ---------------------------------------------------------------------- #include< ...

  5. nodebeginer

    最近对node开始感兴趣,知乎上朴灵推荐入门书籍,goddy翻译的node beginner. 貌似大家对深入浅出node.js评价都不错,以后可以考虑入手看看. 一口气看完了node beginne ...

  6. python质量控制

    一种编写高质量软件的方式是给代码中每个函数写测试,在开发过程中经常性的进行测试.         doctest模块可以在docstring中嵌套测试代码.例如: def average(values ...

  7. relative、absolute和float

    relative.absolute和float   position:relative和position:absolute都可以改变元素在文档中的位置,都能激活元素的left.top.right.bo ...

  8. 打印 PHP $_SERVER 常量

    foreach( $_SERVER as $var => $value){ echo $var.' '.$value.'<br>'; };

  9. 转移服务器,DEDE网站遇到no input file specified!

    公司新配置了服务器,需要从旧服务器上把原来的站点迁移到新服务器,迁移.NET网站没有遇到任何问题,但是在迁移过来一个用DEDE做的网站后,访问首页出现No Input File Specified,后 ...

  10. android--email发送邮件,文本还有附件形式的邮件

    1.首先用的jar包为javaemail 下载地址: https://yunpan.cn/cB3kY8WIvcGtU (提取码:e042) 2.工具包 package com.kllayhello.u ...