将数组进行划分,并求两个数组最大值之间的差值

将数组进行划分,并求两个数组最大值之间的差值

 

将数组进行划分,并求两个数组最大值之间的差值_第1张图片

思路:

因为要将数组进行划分为两个,并计算两个数组之间最大值的差值。

很容易想到用预处理数组,分别计算从左到右所记录的当前最大值和从右到左所记录的当前最大值

然后再进行遍历,计算两者差值的最大值

代码:

#include
#include
#include
using namespace std;

int arr[1000];
//从右往左数,在i位置时,所见过的最大值 
int right_max[1000];
//从左往右数,在i位置时,所见过的最大值
int left_max[1000];
int main(){

	int N;
	scanf("%d",&N);
	for(int i=0;i=0;i--){	
		max_ = max(max_,arr[i]);
		right_max[i] = max_;
	}
	max_ = arr[0];
	for(int i=0;i

进阶版思路:

由于是要计算左边数组部分的最大值减去右边数组部分的最大值。所以直接用下标为0到N-2的最大值直接减去N-1 的值,就是最终答案,为什么呢?因为这样划分首先满足题目条件,并且,这样能够保证右边的值除了最后一个,不可能再有机会增大,所以这样算就能直接得到答案。

你可能感兴趣的:(基础算法,#,牛客竞赛,算法)