重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的大水量。
说明:你不能倾斜容器。
暴力,冲冲冲!怎么省事怎么来!
what?超出时间限制
乍一看测试数组居然密密麻麻的一大片,处于好奇我把它粘贴到IJ中发现一页都放不下!(调小字号的当我没说)
那咋办呢?
只能是按需求来咯,调优以下吧。
我们利用双指针的方式,从入参数组的两边开始判断,当前面积是否大于大面积并进行记录,如果左边的元素值小则左边的指针向中间靠拢一个元素并判断是否有新的大面积,如果右边的元素小则右边的指针向中间考虑一个元素并判断是否有新的大面积,直到两个指针相遇时结束寻找,返回大面积。
后面分析了一下时间复杂度,通过双循环求解的暴力法时间复杂度为O(N²)而通过双指针的方式时间复杂度则为O(N),两者的运算时间差距是很大的。
话不多说上代码
public static int maxArea(int[] height) {int l = 0; //定义左边的指针
int r = height.length - 1; //定义右边的指针
int max = 0; //初始化大面积为0
while(r >l){ //当两个指针相遇时结束寻找
max = Math.max(max,Math.min(height[l],height[r]) * (r - l)); //比较当前面积与记录的大面积,将大面积赋给max
if(height[l] >= height[r]){ //所指元素值较小的指针向中间靠拢寻找新的大面积
r--;
}else{l++;
}
}
return max;
}
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧