题目我就不念了,就一个字难理解,给的题总是这么难懂,总感觉出题人的语文是体育老师教的?
还有就是思维转变,才能能好的理解?一味的钻牛角尖死理解,效果不好
思维的转变 ===>悟性??
不知道是不是
反正题目,给一个整数数组,然后一个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;
}