[编程题] 最大的LeftMax与rightMax之差绝对值
给定一个长度为N的整型数组arr,可以划分成左右两个部分: 左部分arr[0..K],右部分arr[K+1..arr.length-1],K可以取值的范围是[0,arr.length-2] 求这么多划分方案中,左部分中的最大值减去右部分最大值的绝对值,最大是多少? 例如: [2,7,3,1,1] 当左部分为[2,7],右部分为[3,1,1]时,左部分中的最大值减去右部分最大值的绝对值为4; 当左部分为[2,7,3],右部分为[1,1]时,左部分中的最大值减去右部分最大值的绝对值为6; 最后返回的结果为6。 注意:如果数组的长度为N,请尽量做到时间复杂度O(N),额外空间复杂度O(1)
class Solution {
public:
/**
* 求左部分中的最大值减去右部分最大值的绝对值
* vec: 输入数组
* len vec的长度
* 返回:左部分中的最大值减去右部分最大值的绝对值
*/
int getMaxABSLeftAndRight(vector<int> vec, int len) {
int result = 0;
for (int i = 0; i < vec.size() - 1; ++i) {
int tmp = abs( getmax(vec, 0, i) - getmax(vec, i + 1, vec.size() - 1) ) ;
result = max(result, tmp);
}
return result;
}
private:
int getmax(vector<int>& vec, int left, int right) {
int max = 0;
for (int i = left; i <= right; ++i) {
if ( max < vec[i] ) max = vec[i] ;
}
return max;
}
};
探讨如何在给定数组的不同划分下找到左部分的最大值与右部分最大值差的绝对值最大情况,实现时间复杂度O(N)与额外空间复杂度O(1)的算法。
&spm=1001.2101.3001.5002&articleId=52300996&d=1&t=3&u=132e589c9c0948aba4045e681cd64e23)
5220

被折叠的 条评论
为什么被折叠?



