您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

容器盛水问题

题1:盛最多水的容器

在这里插入图片描述

解题:双指针

  1. 初始两个左右指针,可容纳水量min(左指针,右指针)*指针间距
    S(i, j) = min(h[i], h[j]) × (j - i)
  2. 移动数字较小的指针,min(h[i],h[j])可能变大
public class Solution {
	 public int maxArea(int[] height) {
	 	int left = 0;
	 	int right = height.length-1;
	 	int vomumn = 0;
	 	while(left < right ){
	 		int area = Math.min(height[left ],height[right ])*(right -left)
	 		volumn = Math.max(volumn,area)
	 		// 移动较小的数字指针
	 		if(height[left]< =height[righ]){
	 			++left
	 		}else{
	 			-- right
	 		}
	 	}
	 	return volumn
}

题2:容器盛水问题

在这里插入图片描述

 public long maxWater (int[] arr) {
        // write code here
        int l =0;
        int r = arr.length-1;
        int i= l;
        int j = r;
        long v = 0;
        while(i<j){
            // 若左指针数字较小
            if(arr[l]<arr[r]){
                // 从最低边界开始遍历,若比最低边界还低,则累加水量
                if(arr[++i] <arr[l]){
                    v += arr[l]-arr[i];
                    
                }else{
                    // 若大于最低边界,则更新边界值
                    l=i;
                }
            }else{
                if(arr[--i] <arr[l]){
                    v += arr[r]-arr[j];
                }else{
                    r=j;
                }
            }
            
        }
        return v;
    }

分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进