力扣:11. 盛最多水的容器
#define MAX(x,y) ((x) > (y) ? (x) : (y))
#define MIN(x,y) ((x) < (y) ? (x) : (y))
int maxArea(int* height, int heightSize){
int *p1 = height;
int *p2 = &height[sizeof(height)/sizeof(int)-1];
int num = 0;//保存最大值
while(p1 < p2){
ptrdiff_t offset = (ptrdiff_t)p2 - (ptrdiff_t)p1;
int a = offset/sizeof(int);
num = MAX((MIN(*p1,*p2)*a) , num) ;
if(*p1 < *p2)
{
p1++;
}
else
{
p2--;
}
}
return num;
}
int *p2 = &height[sizeof(height)/sizeof(int)-1];怎样让p2指向传入数组最后一个元素啊,我这样写的话sizeof(height)算8
相关推荐
leetcode 盛最多水的容器.java
LeetCode问题11是关于“盛最多水的容器”的问题,要求找出一个数组中两个数,使得它们与x轴共同构成的容器可以容纳最多的水。这个问题主要考察的是数组和双指针的使用。 解题思路 双指针法:最直观的方法是使用两层循环遍历所有可能的点对,计算它们可以形成的容器的容量,然后找出最大值。但这种方法的时间复杂度为O(n^2),在n较大时会导致超时。更高效的方法是使用双指针法,时间复杂度可以降低到O(n)。 初始化:初始化两个指针,一个指向数组的开始位置left=0,另一个指向数组的结束位置right=height.length-1。同时初始化一个变量maxArea来记录遍历过程中的最大容量。 移动指针:比较左右指针指向的高度,移动较矮的一方。这是因为容器的容量受限于较矮的边,而移动较矮的一方可能会找到更高的边,从而可能增加容器的容量。每次移动后,都要计算当前指针所形成的容器的容量,并更新maxArea。 终止条件:当左右指针相遇时,结束遍历。此时maxArea中存储的就是能够找到的最大容量。
【中等】力扣算法题解析LeetCode11:盛最多水的容器
采用双指针法高效求解容器盛水问题。初始化左右指针分别指向数组两端,计算当前容量并更新最大值。关键策略是移动高度较小的指针,以寻找潜在更大容量的组合。算法时间复杂度为O(n),空间复杂度O(1)。Java实现通过循环比较和指针移动,最终返回最大储水量。
c语言-c语言编程基础之leetcode题解第11题盛最多水的容器.zip
c语言 c语言_c语言编程基础之leetcode题解第11题盛最多水的容器
python-leetcode面试题解之第11题盛最多水的容器.zip
python python_leetcode面试题解之第11题盛最多水的容器
网格最短leetcodePython-Leetcode:我的leetcode解决方案
数字老鼠leetcode Python 直到 2018-11-19 23:44:01,我已经解决了 66 / 891 问题。 力扣解决方案表 ID 标题 困难 Python 1 二和 简单的 2 两个数字相加 中等的 11 盛水最多的容器 中等的 26 从排序数组中删除重复项 简单的 27 删除元素 简单的 35 搜索插入位置 简单的 39 组合和 中等的 40 组合和II 中等的 53 最大子阵列 简单的 55 跳跃游戏 中等的 56 合并间隔 中等的 66 加一 简单的 75 排序颜色 中等的 78 子集 中等的 80 从排序数组中删除重复项 II 中等的 88 合并排序数组 简单的 90 子集二 中等的 118 帕斯卡三角形 简单的 119 帕斯卡三角形 II 简单的 121 买卖股票的最佳时机 简单的 122 买卖股票的最佳时机 II 简单的 152 最大乘积子阵列 中等的 167 二和 II - 输入数组已排序 简单的 169 多数元素 简单的 189 旋转阵列 简单的 209 最小尺寸子阵列总和 中等的 216 组合和III 中等的 217 包含重复 简单的 219 包含重


