计算数组中每个数左边第一个比其大的值

如果用最简单的暴力法,时间复杂度最坏情况下 O(n^2)

用栈解决,遍历到a[i]

  • 当栈中为空,直接压入
  • 栈不为空,比较栈顶元素 top 和 a[i]。 若 top < a[i] ,弹出栈顶元素。循环执行,直到遇到第一个 top>a[i] (top即为第一个比其大的元素)或者 栈为空(左边没有比 a[i] 大的元素)

因此栈中元素从底到上按照从大到小的顺序

        for (int index = 0; index < length; index++) {while (!stack.isEmpty() && arr[index] >= stack.peek()) {stack.pop();}if (!stack.isEmpty()) {leftFirstMax[index] = stack.peek();}stack.push(arr[index]);}

计算数组中每个数右边第一个比其大的值

思路完全一样,只不过遍历的顺序从右到左

        // 栈中从栈底到栈顶 顺序,从右往左遍历,计算每个数右边第一个比其大的值for (int index = length - 1; index >= 0; index--) {while (!stack.isEmpty() && arr[index] >= stack.peek()) {stack.pop();}if(!stack.isEmpty()){rightFirstMax[index]= stack.peek();}}

计算数组中每个数左边第一个比其小的值

思路与 1 相同,只不过栈中元素从底到上按照从小到大的顺序

计算数组中每个数左边/右边第一个比其大/小的值相关推荐

  1. 找出数组中每一个元素右边第一个大于它的数

    解题思路: 整体思路有点像映射的关系,如果存在对应元素的比它第一个大的数,就在一个数组对应位置存在这个大值,具体思路如下: 利用栈,从左到右依次压入数组中元素的索引,每次判断待压入的下一个元素是否大于 ...

  2. 计算数组中N个数的平均值(均为正数),将小于平均值的数放到数组前部,大于等于平均值的数放到数组后部。

    #include <stdio.h> #include <stdlib.h> #define N 10 int main() { float c; int a[N],b[N], ...

  3. 汇编语言LENGTHOF运算符:计算数组中元素的个数

    LENGTHOF 运算符计算数组中元素的个数,元素个数是由数组标号同一行出现的数值来定义的.示例如下: .data byte1 BYTE 10,20,30 array1 WORD 30 DUP (?) ...

  4. 计算形参x所指数组中N个数的平均值(规定所有数均为正数)

    计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y数组中输出 #include <stdlib.h> #include <stdi ...

  5. 单调栈-找到左边/右边第一个比自己小/大的元素

    1. 问题描述: 已知一个int类型的整型数组,在nums数组中找到左边或者右边第一个(下一个)比自己小或者大的元素. 2. 思路分析: 这是经典的单调栈的题目,我们可以在遍历nums数组元素的时候维 ...

  6. 数组中两个数的最大异或值 两数异或值一定小于两数相加和

    链接:数组中两个数的最大异或值 给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间 ...

  7. arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」

    今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...

  8. LeetCode 421. 数组中两个数的最大异或值

    421. 数组中两个数的最大异或值 Idea 假设选择了数组中的元素ai和aj使得它们达到最大按位异或结果x:x=ai⊕ajx=a_{i}⊕a_{j}x=ai​⊕aj​,其中⊕表示按位异或运算. 根据 ...

  9. java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...

    分析问题 问题只需要找到排序数组中某个数K的个数,由于已经是排序了,K一定是在一堆的,所以我们只需要找到第一个K的index1,然后找到最后一个K的index2就可以了 而寻找K的过程我们一般通过二分 ...

最新文章

  1. Mybatis基础知识点:trim标签的使用
  2. ubuntu下创建图标
  3. 在神经网络中使用辍学:不是一个神奇的子弹
  4. 卸载 流程_一款适合于windows端的卸载神器 彻底清理残留软件
  5. linux下memcache安装
  6. [转载] Java中的abstract关键字
  7. Linux的常见的发行版以及不同发行版之间的联系与区别
  8. 外资企业可以在中国上市吗
  9. 修改服务器线路,介绍几种常见的网络服务器线路
  10. 普渡大学计算机科学竞争激烈,Top12普渡大学计算机博士全奖录取:同时收获Top博士和藤校耶鲁硕士录取!她该怎么选择?...
  11. 微软输入法数字有间隔_Word 2016中使用微软拼音输入法,换行后输入数字、标点时会没有输入进去,需要再输入一次...
  12. 计算机设备图形符号,常用一次设备的图形符号和文字符号
  13. Matplotlib画图的复杂颜色设置(包括fig, ax, spines, tick)
  14. Java创建图片并绘图
  15. 华芯微特SWM32SRET6-50控制器应用记录
  16. 从零开始在服务器上搭建QQ机器人——插件(二)
  17. h3c 模拟器 HCL 2.1.2 win10安装,vbox hyper-v vmware 兼容
  18. 【品牌搜索】两步查找品牌数据,快速实现品牌营销布局。
  19. sv中静态属性和静态方法
  20. python基于PHP+MySQL的物流配送管理系统平台

热门文章

  1. Python OpenCV图像运算实战进阶!❤️基本操作+算术运算❤️ 详细分析,1.3万+赶快收藏起来吧~
  2. 【全网最全】Ubuntu基本操作——磁盘空间不足与扩容问题集锦
  3. keil中html文件,中颖单片机 Keil插件
  4. COMODO网络安全完全版8下载
  5. 复杂句变简单句 java_英语简单句变复杂句的精华!
  6. GPS 0183协议GGA、GLL、GSA、GSV、RMC、VTG、ZDA、DTM
  7. 学习韩顺平老师java io 笔记整理
  8. SSG550巡检脚本
  9. 设计模式之美总结(重构篇)
  10. 使用JQuery完成定时弹出广告/图片