lc11 盛最多水的容器

发布时间:2024年01月22日

问题:给一个整数数组,数组中的元素值为高,数组元素之间的距离为边,计算任意两个元素之间的面积(以元素值低的为高),求最大面积


===题解:双指针题解
? ?//设计算法:先计算索引最小元素与索引最大元素之间的乘积,再比较两元素大小,移动元素最小的索引。循环终止条件,两元素索引相等

//初始化两指针
int i =0;
int j =height.length-1;

//初始化最大值
int maxArea = 0;

//当两指针相等时,停止循环
while(i!=j){

//计算两元素之间的面积
int area = Math.min(height[i], height[j])*(j-i);
if(area > maxArea) maxArea =area;

//确定两指针最小的元素值,并移动其指针
if(height[i]<=height[j]){i++;} else{j--;}
}
return maxArea;


===题解:双for题解
class Solution {
? ? public int maxArea(int[] height) {
? ? ? ? //设计算法:对比数组中任意两个元素,取元素最小的值为高h,两个元素之间的位差为边e,计算高与边的积m,取m最大的那个值。需要计算(n+1)*n/2个乘积,再对这些乘积取最大值
? ? ? ? //height数组的长度
? ? ? ? int n = height.length;

? ? ? ? //初始化最大面积 mina
? ? ? ? int mina=0;

? ? ? ? //双层循环依次计算任意两组元素的面积,及更新最大面积
? ? ? ? for(int i=0; i<n;i++){
? ? ? ? ? ? for(int j =i+1;j<n;j++){
? ? ? ? ? ? ? ? //取height[i]与height[j]最小的值minh
? ? ? ? ? ? ? ?//int minh = ()->{if(height[i]>=height[j]){return height[j];} else return height[i];};
? ? ? ? ? ? ? ? int minh =Math.min(height[i], height[j]);
? ? ? ? ? ? ? ? int minarea = minh*(j-i);
? ? ? ? ? ? ? ? if(minarea > mina) mina = minarea;
? ? ? ? ? ? }
? ? ? ? }
? ? ? ? return mina;
? ? }
}

文章来源:https://blog.csdn.net/m0_53842576/article/details/135760092
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。