题目

有一个长度为 n 的序列 A,A[i] 表示序列中第 i 个数(1<=i<=n)。她定义序列中第 i 个数的 prev[i] 值 为前 i-1 个数中比 A[i] 小的最大的值,即满足 1<=j<i 且 A[j]<A[i] 中最大的 A[j],若不存在这样的数,则 prev[i] 的值为 0。

思路

很显然,使用双for循环的复杂度为O(n^2);
伪代码如下:

for (int i = 1; i < a.size(); i++) {int max = 0;for (int j = 1; j < i; j++) {if(a[j] < a[i] && a[j] > max){max = a[j];}}prev[i] = max;
}

此时可以借助二叉搜索树来完成这个任务,这样复杂度就是O(nlogn)了,由于容器set的底层是红黑树,我们可以直接使用。
这里介绍一下set的api:lower_bound();
lower_bound() 函数用于在有序区间内查找大于等于目标值的第一个元素。也就是说,使用该函数在指定范围内查找某个目标值时,最终查找到的不一定是和目标值相等的元素,还可能是比目标值大的元素。
但是返回的迭代器的前一个迭代器则是小于等于目标值的最后一个元素,这一点和前i-1个数中比A[i]小的最大值就不谋而合了。
代码如下:

set<long>mySet;
for(int i = 0; i < n; i++)
{int tmp;//获取A[i]cin >> tmp;//基于set数据结构进行二分查找auto iter = mySet.lower_bound(tmp);//前i-1个数中比A[i]小的最大值为(*--iter)if (iter != mySet.begin()) prev[i] = (*--iter);mySet.insert(tmp);
}

得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找相关推荐

  1. 从n个数中选取m个数的所有组合

    题目: n个数1,2,...,n,从这n个数中任意选m个数,输出所有不同组合,共有C(n,m)种不同组合.如n=4,m=2,会产生如下输出: 1 2 1 3 2 3 1 4 2 4 3 4如n=5,m ...

  2. c++动态规划解决一系列数中互不相邻数字之和的最大值

    c++动态规划解决一系列数中互不相邻数字之和的最大值 问题描述 解决思路 C++代码编写 运行结果 问题描述 给定一系列数字{1,2,4,1,7,8,3},要求其中互不相邻的数字之和的最大值. 解决思 ...

  3. 二分查找(Binary Search)需要注意的问题,以及在数据库内核中的实现

    问题背景 今年的实习生招聘考试,我出了一道二分查找(Binary Search)的题目.题目大意如下: 给定一个升序排列的自然数数组,数组中包含重复数字,例如:[1,2,2,3,4,4,4,5,6,7 ...

  4. C++100w个数中找出最大的前K个数

    /*100w个数中找出最大的前K个数*/ #include <iostream> using namespace std; #include <assert.h> const ...

  5. 谈从10亿个数中找出前10万个最大的

    谈从10亿个数中找出前10万个最大的 期的实验显示10亿个浮点数大概占据3G左右的空间,因此全部一次性读入内存目前在个人PC上是不太现实的.本次讨论不考虑内存等等,只考虑算法. 如果一次性比较排序,然 ...

  6. 如何在10亿个数中找到前1000大的数?

    2019独角兽企业重金招聘Python工程师标准>>> 如何在10亿个数中找到前1000大的数? 定位 TopN问题 算法 排序不是最优的解决方案: 可以考虑分治法: 类似快速排序中 ...

  7. 在10亿个数中找出前1000个最大的

    在10亿个数中找出前1000个最大的 假设现在有一个文件,里面存放了10亿个整数,需要找出前1000个最大的. 方法: 1.普通排序,部分排序:几乎不可取. 2.分治法:随机选一个数t,然后对整个数组 ...

  8. 从十亿个数中找出前1000个最大的数的算法

    10亿个数中找出1000个最大的数的算法思路: 1,先拿出前1000个数字,并排序,找出最小值为 minValue .    2,  然后再依次拿出1000个数字,找出最大值为 tempMaxValu ...

  9. 利用最小堆找出10亿个数中最大的10000个数

    最小堆 最小堆是一种完全二叉树,特点是根节点比两个子节点都小(或者根节点比子节点都大) 过程 先找10000个数构建最小堆 依次遍历10亿个数,如果比最小堆的最小值大,则替换这个最小值,并重新构建最小 ...

最新文章

  1. 固态硬盘市场或将提前爆发
  2. python分布式爬虫及数据存储_分布式爬虫
  3. php 生成小程序二维码
  4. 由我妈买菜,联想到了数据挖掘
  5. ajax(检测用户名,添加数据)
  6. java删除文件模糊_Java实现的模糊匹配某文件夹下的文件并删除功能示例
  7. Spring boot web(2):web综合开发
  8. HH SaaS电商系统的线下服务商品库存和采购设计
  9. 《C++面向对象高效编程(第2版)》——3.16 从函数中返回引用
  10. Linux知识积累(2)dirname的使用方法
  11. 怎么通过scanf读取一个空白前的字符
  12. python爬虫案例——百度贴吧数据采集
  13. vSphere 5.5.0 U1配置问题:主机的快速统计信息不是最新的
  14. [aminer] 2020清华大学人工智能发展报告pdf
  15. IOS Dev Intro - NM OTool lipo
  16. 孙过庭草书:《景福殿赋》(图像古昔,以当箴规),韵味十足!
  17. html 文本框选中状态,JavaScript onselect 事件:文本框中的文本被选中
  18. 直连路由和静态路由(实验)
  19. 重发布直连路由到 OSPF
  20. html为知笔记模板,为知笔记,模板制作.doc

热门文章

  1. javaScript实现E-mail 验证
  2. 华为鸿蒙osbeta在哪看发布会,重磅消息!华为在发布鸿蒙OS2.0手机beta版本后,又发布搭载鸿蒙的新品!!...
  3. 计算机英语女人英语怎么说,英语时差:计算机和女人
  4. c语言成绩转换绩点,如何将平时成绩转化为GPA成绩?
  5. antd From 中 Form.Item里含有自己封装的组件,获取不到值的解决方法
  6. React后台管理系统-品类的增加、修改和查看
  7. CCS3的过渡、变换、动画以及响应式布局、弹性布局
  8. 盒模型的属性丶display显示丶浮动
  9. laydate 时间控件去掉秒以及解决在移动端不能滑动的问题
  10. Java实现回形数,只利用数组、循环和if-else语句