自己可以做英文网站么,汕头澄海招聘网,张家界专业seo优化,零基础小程序开发教程题目要求 思路 1.正常用双循环外循环i从0开始#xff0c;内循环从height.size()-1开始去计算每一个值是可以的#xff0c;但是因为数据量太大#xff0c;会超时。 2.考虑到超时#xff0c;需要优化一些#xff0c;比如第一个选下标1#xff0c;第二个选下标3和第一个选下…题目要求 思路 1.正常用双循环外循环i从0开始内循环从height.size()-1开始去计算每一个值是可以的但是因为数据量太大会超时。 2.考虑到超时需要优化一些比如第一个选下标1第二个选下标3和第一个选下标3第二选择下标1是一样的所以内循环遍历到小于 时数据重复可以跳过但是优化后还是超时 3.考虑优化高度如果i一样height[j] height[j-1]说明高度要么减小要么不变但是由于底减少所以面积肯定降低所以再拿height[j] height[j-2]进行比较只要小于height[j]的都可以跳过。同理如果j一样height[i] height[i1]如果满足这个也可以跳过。但是优化后还有超时 4.此时说明双循环已经不能满足了我们采用双指针left和right此时底部已经是最大的了我们可以将两个值较小的那个往中间移动去寻找更大面积的组合。 代码实现
class Solution {
public:int maxArea(vectorint height) {int left 0;int right height.size() - 1;int s 0;int max 0;while(left right){int h min(height[left], height[right]);s h * (right - left);if(s max)max s;//移动指针if(height[left] height[right])right--;elseleft;}return max;}
};