查找满足大于左边小于右边的数

题目:

找出数组中所有满足这样条件的数字:

1、数字左边的数都不大于它(对第一个数字没有这个要求)

2、数字右边的数都不小于它(对最后一个数字没有这个要求)

思路:

使用一个数组rightMin[ ]记录原始数组array[i]右边(包括自己)的最小值。

假设原始数组为array[ ] = {7,10,2,6,19,22,32}

则rightMin[ ] = {2,2,2,6,19,22,32}

然后遍历数组,维持一个前面数组的最大值,只要当前值满足 >= leftMax 并且 == rightMin[i] 则当前数字满足条件。

代码:

#include<iostream>
//#include<string>
//#include<vector>
using namespace std;

void smallLarge(int *nums , int len)
{
	if(nums == NULL || len <= 0)
		return;
	int *rightMin = new int[len]();
	rightMin[len-1] = nums[len-1];
	for(int i = len - 2 ; i >= 0 ; i--)
	{
		rightMin[i] = min(nums[i] , rightMin[i+1]);
	}
	int leftMax = 0x80000000;//最小值
	for(int i = 0 ; i < len ; i++)
	{
		if(nums[i] >= leftMax)
		{
			leftMax = nums[i];
			if(nums[i] == rightMin[i])
				cout<<nums[i]<<endl;
		}
	}
	delete [] rightMin;
}

int main()
{
	int nums[7] = {7,10,2,6,19,22,32};
	smallLarge(nums , 7);
	return 0;
} 

版权声明:转载请注明出处。

时间: 2024-10-13 22:18:20

查找满足大于左边小于右边的数的相关文章

CDOJ 1104 求两个数列的子列的交集 查询区间小于A的数有多少个 主席树

求两个数列的子列的交集 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1104 Description 给两个数列A, B,长度分别为n1, n2,保证A中每个元素互不相同,保证B中每个元素互不相同..进行Q次询问,每次查找A[l1...r1]和B[l2..r2]的交集 集合 大小是多少.. 比如 A = {1,2,3,4,5,6,7},B = {7,6,5,4,3,2,1}

解决左边固定右边自适应宽度的方案

上一篇文章中有提及过很多web前端开发者用float+margin+position:absolute来实现表单内容的左边文字固定右边的输入框自适应宽度的问题,当然,这个问题我也在百度中搜索过,基本搜索出来的答案都是这样描述的,我也在上一篇文章中提出过浮动和绝对定位属于脱离文档流布局,是会损耗性能的,但是百度中却没有给出我所想表达出的解决方案,所以不得不在此将该方案具体的描述清楚. 首先,我需要介绍的是display:box这个属性,它是今天弹性布局的主角,虽然它有个更加强大的弟弟display

The Stern-Brocot Number System(树的左边还是右边)

The Stern-Brocot Number System Input: standard input Output: standard output The Stern-Brocot tree is a beautiful way for constructing the set of all nonnegative fractions m / n where m and n are relatively prime. The idea is to start with two fracti

请定义一个宏,比较两个数的a、b的大小,不能使用大于、小于、if语句(转载)

笔试的时候经常问这些: 方法一: #define max(a,b) ((((long)((a)-(b)))&0x80000000)?(b):(a)) 若a>b,则a-b的二进制最高位为0,与上任何数还是0,所以大数为a: 否则,a-b为负数,最高位为1,与上0x80000000(最高位为1其他为0)之后为1,所以此时最大数为b. 方法二: #define max(a,b) ((((a)-(b))&(1<<31))?(b):(a)) 方法三:      1.#define 

挑战面试编程:查找数组中第k大的数

查找数组中第k大的数 问题: 查找出一给定数组中第k大的数.例如[3,2,7,1,8,9,6,5,4],第1大的数是9,第2大的数是8-- 思路: 1. 直接从大到小排序,排好序后,第k大的数就是arr[k-1]. 2. 只需找到第k大的数,不必把所有的数排好序.我们借助快速排序中partition过程,一般情况下,在把所有数都排好序前,就可以找到第k大的数.我们依据的逻辑是,经过一次partition后,数组被pivot分成左右两部分:S左.S右.当S左的元素个数|S左|等于k-1时,pivo

HDU6464 (权值线段树)-(查找区间第k1小于第k2小之间的和)

http://acm.hdu.edu.cn/showproblem.php?pid=6464 不理解先看博客:https://blog.csdn.net/g21glf/article/details/82986968 已知一开始有一个空序列,接下来有Q次操作,每次操作给出type.first和second三个值.当type为1时,意味着该操作属于第一种操作:往序列尾部添加first个second数.当type为2时,意味着该操作属于第二种操作:查询序列中第first小至第second小的数值之和

左边logo 右边广告图片布局 div css左右浮动布局实例

左边logo 右边广告图片布局(div css左右浮动布局实例) 一般网页头部是左边网站标志logo,右边为广告图片或电话号码图片,这里DIVCSS5为大家介绍对float浮动使用实例布局介绍. 需要div+css布局案例效果图需要div+css布局案例效果图(缩小)一.DIVCSS5实例布局技术点说明 - TOP 1.图片切出说明:首先切好左边logo图片,右边广告图片(切图注意不影响图片质量情况尽量宽度高度尺寸切小).2.采用float:left和float:right布局:一般遇到内容靠左

linux 查找指定内容并显示指定行数的命令,显示匹配行和行号

grep -i "desktop-printing-0.19-20.2.el5.x86_64" -n -A 10 install.log linux 查找指定内容并显示指定行数的命令,显示匹配行和行号,布布扣,bubuko.com

正则表达式:网店中折扣价格-要求大于0小于10,且允许保留一位小数点

需求:网店中折扣价格-要求大于0小于10,且允许保留一位小数点 需求分析: 1,)取值范围为(0,10),两端都是开区间: 2,)“可保留一位小数”,可以不包含小数,但如果包含小树就一定要仅包含一位小数. 开发(javascript下): 第一步:0-10包含一位小数:/^\d(\.\d)?$/ 第二步:排除特殊的0和0.0和10,这样的写法为: /^[^0][^0.0][^10]\d(\.\d)?$/ 测试下:是否是我们想要的结果呢? 答案:no 具体原因,我也解释不清. 换种思路: 既然0.