最大的LeftMax与rightMax之差绝对值----BAT实习内推笔试卷(第二场)

来源:互联网 发布:java的md5加密 编辑:程序博客网 时间:2024/05/29 20:03

[编程题] 最大的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;}};


0 0
原创粉丝点击