计算数组中每个数左边/右边第一个比其大/小的值
计算数组中每个数左边第一个比其大的值
如果用最简单的暴力法,时间复杂度最坏情况下 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 相同,只不过栈中元素从底到上按照从小到大的顺序
计算数组中每个数左边/右边第一个比其大/小的值相关推荐
- 找出数组中每一个元素右边第一个大于它的数
解题思路: 整体思路有点像映射的关系,如果存在对应元素的比它第一个大的数,就在一个数组对应位置存在这个大值,具体思路如下: 利用栈,从左到右依次压入数组中元素的索引,每次判断待压入的下一个元素是否大于 ...
- 计算数组中N个数的平均值(均为正数),将小于平均值的数放到数组前部,大于等于平均值的数放到数组后部。
#include <stdio.h> #include <stdlib.h> #define N 10 int main() { float c; int a[N],b[N], ...
- 汇编语言LENGTHOF运算符:计算数组中元素的个数
LENGTHOF 运算符计算数组中元素的个数,元素个数是由数组标号同一行出现的数值来定义的.示例如下: .data byte1 BYTE 10,20,30 array1 WORD 30 DUP (?) ...
- 计算形参x所指数组中N个数的平均值(规定所有数均为正数)
计算形参x所指数组中N个数的平均值(规定所有数均为正数),作为函数值返回;并将大于平均值的数放在形参y数组中输出 #include <stdlib.h> #include <stdi ...
- 单调栈-找到左边/右边第一个比自己小/大的元素
1. 问题描述: 已知一个int类型的整型数组,在nums数组中找到左边或者右边第一个(下一个)比自己小或者大的元素. 2. 思路分析: 这是经典的单调栈的题目,我们可以在遍历nums数组元素的时候维 ...
- 数组中两个数的最大异或值 两数异或值一定小于两数相加和
链接:数组中两个数的最大异或值 给你一个整数数组 nums ,返回 nums[i] XOR nums[j] 的最大运算结果,其中 0 ≤ i ≤ j < n . 进阶:你可以在 O(n) 的时间 ...
- arrays中copyof复制两个数组_异或的魅力!图解「数组中两个数的最大异或值」
今天分享的题目来源于 LeetCode 第 421 号问题:数组中两个数的最大异或值.在 异或 这个知识点里面属于一个中高难度的题目. 题目描述 给定一个非空数组,数组中元素为 a0, a1, a2, ...
- LeetCode 421. 数组中两个数的最大异或值
421. 数组中两个数的最大异或值 Idea 假设选择了数组中的元素ai和aj使得它们达到最大按位异或结果x:x=ai⊕ajx=a_{i}⊕a_{j}x=ai⊕aj,其中⊕表示按位异或运算. 根据 ...
- java 数组中某个数出现的概率_剑指Offer解题报告(Java版)——排序数组中某个数的个数 38...
分析问题 问题只需要找到排序数组中某个数K的个数,由于已经是排序了,K一定是在一堆的,所以我们只需要找到第一个K的index1,然后找到最后一个K的index2就可以了 而寻找K的过程我们一般通过二分 ...
最新文章
- Mybatis基础知识点:trim标签的使用
- ubuntu下创建图标
- 在神经网络中使用辍学:不是一个神奇的子弹
- 卸载 流程_一款适合于windows端的卸载神器 彻底清理残留软件
- linux下memcache安装
- [转载] Java中的abstract关键字
- Linux的常见的发行版以及不同发行版之间的联系与区别
- 外资企业可以在中国上市吗
- 修改服务器线路,介绍几种常见的网络服务器线路
- 普渡大学计算机科学竞争激烈,Top12普渡大学计算机博士全奖录取:同时收获Top博士和藤校耶鲁硕士录取!她该怎么选择?...
- 微软输入法数字有间隔_Word 2016中使用微软拼音输入法,换行后输入数字、标点时会没有输入进去,需要再输入一次...
- 计算机设备图形符号,常用一次设备的图形符号和文字符号
- Matplotlib画图的复杂颜色设置(包括fig, ax, spines, tick)
- Java创建图片并绘图
- 华芯微特SWM32SRET6-50控制器应用记录
- 从零开始在服务器上搭建QQ机器人——插件(二)
- h3c 模拟器 HCL 2.1.2 win10安装,vbox hyper-v vmware 兼容
- 【品牌搜索】两步查找品牌数据,快速实现品牌营销布局。
- sv中静态属性和静态方法
- python基于PHP+MySQL的物流配送管理系统平台