房地产公司 网站建设,七牛云免费服务器,南通seo网站优化软件,可以做课程的网站给定一个长度为 n 的整数数组 height 。有 n 条垂线#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。 原题链接: 盛最多水的容器
解题思路…给定一个长度为 n 的整数数组 height 。有 n 条垂线第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。 原题链接: 盛最多水的容器
解题思路 这道题乍一看没什么思路用暴力循环的话太麻烦了要从第一个循环剩下的所有第二个循环剩下的所有第三个。。。 我也是看了答案之后才明白怎么算其实很简单。
这个盛水的面积 minheight[i]height[j]*j-i
从i0 和jheigh.length-1算起 在这个状态下只要挪动板子j-i都是会变小
minheight[i]height[j] 只有变大才有机会变大
由于求的是最小值那么只有最小值变大面积才有变大的可能。 所以每次挪动最小的板子直到两个板子重合就能得出最大面积。
代码 public int maxArea(int[] height) {int area 0;int front 0;int backend height.length-1;while(front!backend){int current Math.min(height[front],height[backend])*(backend-front);if(currentarea){area current;}if(height[front]height[backend]){front;}else{backend--;}}return area;}这个算法让我有种我当年上高中事做题做不出老师一讲就听懂了的感觉梦回高三。 我啥时候才能到这种水平呀