• Leetcode 11. 盛最多水的容器


    11. 盛最多水的容器 - 力扣(LeetCode)

    思路1 双循环(超时了)

    1. 确定计算公式

    res = min(height[i], height[j]) * (j - i)

    2.使用双循环计算出所有的值,保留最大值。

    func maxArea(height []int) int {
    	res := 0
    	length := len(height)
    	if length < 2 {
    		return res
    	}
    	for i := 0; i < length; i++ {
    		for j := i + 1; j < length; j++ {
    			temp := min(height[i], height[j]) * (j - i)
    			res = max(temp, res)
    		}
    	}
    	return res
    }
    
    func max(v1, v2 int) int {
    	if v1 > v2 {
    		return v1
    	} else {
    		return v2
    	}
    }
    
    func min(v1, v2 int) int {
    	if v1 > v2 {
    		return v2
    	} else {
    		return v1
    	}
    }
    

      

    思路2 双指针

    1. 首先确定计算公式 

    res = min(height[left],height[right])*(right-left)

    2. 由公式可以看出,res的大小由短板来决定。

      在移动指针时,如果移动短板,短板可能会变大,res也可能会增大。

      如果移动长板,短板不变的情况下,长板可能不变或者变小,从而导致res不变或者变小。

    3. 因此,初始化双指针分列位于左右两端,循环每轮将短板向内移动一格,并更新res最大值,直到指针相遇时跳出;即可获得最大面积。

    func maxArea(height []int) int {
    	res := 0
    	length := len(height)
    	if length < 2 {
    		return res
    	}
    	left := 0
    	right := length - 1
    	for left < right {
    		if height[left] < height[right] {
    			res = max(res, height[left]*(right-left))
    			left += 1
    		} else {
    			res = max(res, height[right]*(right-left))
    			right -= 1
    		}
    	}
    	return res
    }
    
    func max(v1, v2 int) int {
    	if v1 > v2 {
    		return v1
    	} else {
    		return v2
    	}
    }
    

      

     

  • 相关阅读:
    Linux查看密码
    zabbix 邮件报警配置
    Linux 修改zabbix server的web访问端口
    Zabbix 配置监控主机
    Linux 安装zabbix
    Json解析注解 ---@SerializedName
    IntelliJ IDEA 设置背景图片
    @Override is not allowed when implementing interface method
    nginx ------反向代理和负载均衡
    IntelliJ IDEA 性能优化
  • 原文地址:https://www.cnblogs.com/lizhengnan/p/16296421.html
Copyright © 2020-2023  润新知