一、题目描述

给定义个数组v,对于数组中每一个元素,找到其后面元素中第一个比它大的元素,并且记录在数组v2中返回。例如给定数组v = {1,3,6,-1,2},返回v2={3,6,-1,2,-1}。(如果找不到,记为-1),并且要求时间复杂度应该为O(N)。

二、解题思路

可能看到这道题,大家首先会想到对于数组中的元素一个一个去遍历,进而找到第一个比它大的元素,但是这种做法的时间复杂度应该为O(n**2),因此不可采用此种方法。

进一步去思考,发现可以利用堆栈去解决,如果对于当前元素v[i],发现v[i]+1 < v[i],此时不用再去比较v[i+2]与v[i]的关系,而是把i压入堆栈中,去比较v[i+1]与v[i+2]的关系,一旦发现满足后一个元素大于第一个元素的,便输出。

vector<int> FindMax(vector<int> &num)
{int len = num.size();
if(len == 0) return {};
vector<int> res(len,-1);
stack<int>  notFound;
int i = 0;
while(i<len)
{
if(notFound.empty() || num[notFound.top()] > num[i])
{notFound.push(i++);
}
else
{res[notFound.top()] = num[i];notFound.pop();
}}
return res;}

找到一个数组中每一个元素第一个比它大的元素相关推荐

  1. 找出一个数组中唯一一个出现2次的数字

    找出一个数组中唯一一个出现2次的数字,不清楚是不是LeetCode上的题.本人默认是LeetCode上的题. 一个数组中有N个数字,但是只有一个数字出现了2次,其他的数字均不相同.这种问题一般应该采用 ...

  2. 快速找出一个数组中的最大数、第二大数

    http://blog.csdn.net/hackbuteer1/article/details/8035261#comments 快速找出一个数组中的最大数.第二大数 思路:如果当前元素大于最大数 ...

  3. 编程之美--读书笔记--返回一个数组中所有元素被第一个元素除的结果

    笔试题目1:写一个函数,返回一个数组中所有元素被第一个元素除的结果 很多人会想到如下: void DivAarry(int *pArray,int size) { for(int i=size-1;i ...

  4. 在 PHP 中从数组中删除一个元素

    问: 有没有一种简单的方法可以使用 PHP 从数组中删除一个元素,从而使 foreach ($array) 不再包含该元素? 我认为将它设置为 null 会做到这一点,但显然它不起作用. 答1: hu ...

  5. 找出一个数组中出现次数最多的那个元素

    Description 找出一个数组中出现次数最多的那个元素 Input 多组输入,请处理到文件结束 每组第一行输入一个整数n(不大于20) 第二行输入n个整数 Output 找出n个整数中出现次数最 ...

  6. 算法题:找出一个数组中相加值最大的连续序列元素

    package arithmetic;/*** @author SHI* 求一个数组中相加值最大的连续序列元素*/ public class MaxSequence {public static vo ...

  7. jquery如何删除数组中的一个元素?

    jquery删除数组中的一个元素的方法是用 splice 实现的. 举例说明: var arrList = ['a','b','c','d']; arrList.splice(jQuery.inArr ...

  8. [jstips]向数组中插入一个元素

    向现有数组中插入一个元素是经常会见到的一个需求.你可以: 使用push将元素插入到数组的尾部: 使用unshift将元素插入到数组的头部: 使用splice将元素插入到数组的中间: 上面那些方法都是常 ...

  9. 遍历strs数组,并判断数组中每一个元素的长度, * 将长度为偶数的元素和长度为奇数的元素分别存放在两个集合中,

    package Day08;import java.util.ArrayList;/*** 二* 字符串数组strs中包含字符串{"12","345",&quo ...

最新文章

  1. Cisco常见路由器密码和版本恢复方法
  2. 【正则化】csdn markdown python 批量给文本行行头添加“•”符号,“- ”(实心圆)
  3. Android使用ViewPager实现左右滑动效果
  4. Codeforces Round #572 (Div. 2)(ABCD1D2E)
  5. OutOfMemoryError:无法创建新的本机线程–问题神秘化
  6. android pick file,LFilePicker---文件选择利器,各种样式有它就够了
  7. python中classmethod与staticmethod的差异及应用
  8. python文件操作以及相对路径和绝对路径问题
  9. 群晖做网页服务器_群晖NAS服务器管理后台的登入教程
  10. 杀毒软件-试用卡巴斯基全方位安全软件
  11. 图书馆借书系统c语言,急求程序!!!简单图书馆借/还书管理子系统
  12. 【数据分析】单因素方差分析(含MATLAB和Python实现)
  13. Android短信息验证码自动填写详细介绍
  14. 大数据数据库:MPP vs MapReduce
  15. [篇二章四]_安装 Windows 11 系统
  16. 软件经验|使用消费级无人机干测绘(四)ContexCapture软件介绍
  17. 数据库和表的基本操作
  18. Android智能指针——读书笔记
  19. 多线程:转载自-时光如水_岁月如哥
  20. 如何在大型系统中提供拼音检索服务

热门文章

  1. 微信小程序:Component “页面路径“ does not have a method “ 方法名“ to handle event “tap“.
  2. linux7开启telnet服务,centos7开启telnet服务
  3. 财务管理中计算机能解决什么问题,事业单位财务管理中计算机技术的作用探究...
  4. JS检测浏览器开发者工具是否打开
  5. GridView/DataGrid行单击和双击事件实现代码_.Net教程
  6. c++ <iomanip> setw()函数 setfill()函数
  7. oracle 集合为空判断,执行 oracleasm listdisks,发现输出缺少多行
  8. linux git 制造冲突并解决冲突
  9. Spring Boot 集成 XXL-JOB
  10. 编写高质量代码:改善Java程序的151个建议 (第1章 Java开发中通用的方法和准则)