题目我就不念了,就一个字难理解,给的题总是这么难懂,总感觉出题人的语文是体育老师教的?
还有就是思维转变,才能能好的理解?一味的钻牛角尖死理解,效果不好
思维的转变 ===>悟性??
不知道是不是
反正题目,给一个整数数组,然后一个k
其中k 是其中元素的下标,具体不确定
然后满足,i <= k <= j
实现ans = (j - i + 1)* nums[i]是最大值,这就是 好子数组的最大可能分数
换一个意思来理解这到题目
给定柱状图,然后给定一水平线(是其中一柱子的顶部)现在要找围城面积最大值。怎么围?高要尽可能最大,宽要尽可能最大,涉及左右移动,就要想到双指针
int solution(vector<int> &nums, int k){
int n = nums.size(), ans = 0;
int l = k - 1, r = k + 1;
//写一个死循环
for(int i = nums[k]; ; i--){
//先判断左边再判断右边
//左边居然有高于最高点 i 那么左移
while(l >= 0 && nums[l] >= i){
l--;
}
// 右边居然有比当前最高点还高的,那么右移 变得更宽
while(r < n && nums[r] >= i){
r++
}
ans = max(ans, (r - l - 1)*i);
//判断是否到了边界 因为左边到了边界,右边其实可能还可以继续移动,美其名曰继续压榨廉价劳动力 贪心?
if(l == -1 && r == n){
break;
}
}
return ans;
}