【leetcode hot 100 11】移动零

一、暴力解法:两个 for 循环,外层循环遍历所有可能的左边界,内层循环遍历所有可能的右边界

java 复制代码
class Solution {
    public int maxArea(int[] height) {
        int max_area=0;
        for(int i=0; i<height.length; i++){
            for(int j=i+1; j<height.length; j++){
                int x = j-i;
                int y = height[i]<height[j]?height[i]:height[j];
                int area = x*y;
                max_area = max_area>area?max_area:area;
            }
        }
        return max_area;
    }
}

错误分析:当涉及的数组较大时,会超出时间限制

双指针:一个指向数组的头部,一个指向数组的尾部,然后我们计算当前两个指针所指向的边界能形成的容器的水容量,并更新最大值。

java 复制代码
class Solution {
    public int maxArea(int[] height) {
        int left=0, right=height.length-1;
        int max_area=0;

        while(left<right){
            int area = (right-left) * Math.min(height[left],height[right]);
            max_area = Math.max(max_area,area);

            // 保存值较大的边
            if (height[left]>height[right]){
                right--;
            }
            else{
                left++;
            }
        }
        return max_area;
    }
}

注意:

  • 有效利用Math.min()Math.max()函数
  • 在更新left和right,保存值比较大的那一个
相关推荐
海梨花19 小时前
字节面试高频算法题
java·算法·面试·职场和发展
aqiu11111119 小时前
python02
算法
瓦特what?19 小时前
位运算核心技巧与应用
java·jvm·算法
无限码力19 小时前
阿里算法岗 0530笔试真题 - 荆棘林的最优砍断计划
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试真题·阿里巴巴笔试真题
人道领域19 小时前
【LeetCode刷题日记】90.子集Ⅱ--- 归纳题解
java·开发语言·leetcode
随意起个昵称19 小时前
线性dp-LIS题目5(导弹拦截,二分优化)
c++·算法·动态规划
winlife_19 小时前
全程用 AI 做一款商业级手游 · EP10 道具系统:让三个按钮真正改变棋盘
windows·算法·unity·ai编程·游戏开发·mcp·玩法系统
计算机安禾19 小时前
【数据库系统原理】第16篇:范式理论(下):多值依赖与第四范式——消除非平凡的非函数依赖
算法
lqqjuly19 小时前
一致性模型深度解析
人工智能·深度学习·算法
RisunJan19 小时前
Linux命令-patch (为开放源代码软件安装补丁程序)
linux·服务器·算法