【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,保存值比较大的那一个
相关推荐
程序员小白条1 小时前
度小满运维开发一面
java·运维·python·职场和发展·运维开发
小狗照亮每一天1 小时前
【菜狗学聚类】序列嵌入表示、UMAP降维——20250930
算法·分类·聚类
彩云回3 小时前
支持向量机(SVM)
算法·机器学习·支持向量机
Asmalin8 小时前
【代码随想录day 29】 力扣 135.分发糖果
算法·leetcode·职场和发展
微笑尅乐8 小时前
多解法详解与边界处理——力扣7.整数反转
算法·leetcode·职场和发展
夏鹏今天学习了吗8 小时前
【LeetCode热题100(31/100)】K 个一组翻转链表
算法·leetcode·链表
薰衣草23338 小时前
力扣——位运算
python·算法·leetcode
未知陨落8 小时前
LeetCode:83.打家劫舍
算法·leetcode
Pluchon9 小时前
硅基计划4.0 算法 字符串
java·数据结构·学习·算法
三年呀9 小时前
共识算法的深度探索:从原理到实践的全面指南
算法·区块链·共识算法·分布式系统·区块链技术·高性能优化