OR25. 左右最值最大差
描述
给定一个长度为N(N>1)的整型数组A,可以将A划分成左右两个部分,左部分A[0..K],右部分A[K+1..N-1],K可以取值的范围是[0,N-2]。求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少?
给定整数数组A和数组的大小n,请返回题目所求的答案。
[2,7,3,1,1],5
返回:6
C++ 解法, 执行用时: 2ms, 内存消耗: 360KB, 提交时间: 2021-06-19
class MaxGap { public: int findMaxGap(vector<int> A, int n) { stack<int> s1, s2; for(int i = n - 1; i > 0; i--){ s1.push(A[i]); if(s2.empty()) s2.push(A[i]); else if(A[i] >= s2.top()) s2.push(A[i]); } int m = A[0], ret = abs(A[0] - s2.top()); for(int i = 0; i < n - 1; i++){ m = max(m, A[i]); ret = max(ret, abs(m - s2.top())); if(s1.top() == s2.top()) s2.pop(); s1.pop(); } return ret; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 428KB, 提交时间: 2021-08-12
class MaxGap { public: int findMaxGap(vector<int> A, int n) { // write code here int maxa=A[0]; int maxb=INT_MIN; int res=0; for(int i=0;i<A.size()-1;i++){ maxa=max(maxa,A[i]); for(int j=i+1;j<A.size();j++){ if(A[j]>maxb) maxb=A[j]; } res=max(res,abs(maxa-maxb)); maxb=INT_MIN; } return res; } };