今天把上次理解错题目的题做了一下,感觉自己一点点找回了有关数组的一些函数知识,很棒~~~~
题目是盛最多水的容器;
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例:
输入: [1,8,6,2,5,4,8,3,7]
输出:49
解释:
在该数组中,8和7组成盛水的最大面积,该面积计算方法是7所在的数组位置8,减去8所在的数组位置1,再乘以两个数中较小的那个,也就是(8-1)*7=49。输出49。
题解:
读完该题,我的第一想法是先找到最大值,保持不变,在遍历剩下数值求最大面积,后来发现这样行不通,满足所有示例写起来有点麻烦,所以之后采用了双指针,i指针初始指向数组位置0,j指针初始指向数组位置n-1;两个指针对应的数值进行比较,大的保持指针位置不变,小的则向后,或者向前进行遍历,i<j。
除此之外,还用到了java中的Math.max(int,int)函数。该函数返回两个比较的最大值,我们通过该函数来更新面积的最大值。
代码如下:
1 | package solution; |