【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,保存值比较大的那一个
相关推荐
QxQ么么3 小时前
移远通信(桂林)26校招-助理AI算法工程师-面试纪录
人工智能·python·算法·面试
Mz12216 小时前
day05 移动零、盛水最多的容器、三数之和
数据结构·算法·leetcode
SoleMotive.6 小时前
如果用户反映页面跳转得非常慢,该如何排查
jvm·数据库·redis·算法·缓存
念越6 小时前
判断两棵二叉树是否相同(力扣)
算法·leetcode·入门
未可知7776 小时前
软件设计师(上午题4)、面向对象、uml、设计模式
设计模式·职场和发展·uml
ghie90907 小时前
线性三角波连续调频毫米波雷达目标识别
人工智能·算法·计算机视觉
却话巴山夜雨时i7 小时前
74. 搜索二维矩阵【中等】
数据结构·算法·矩阵
sin_hielo7 小时前
leetcode 3512
数据结构·算法·leetcode
_F_y7 小时前
二分:二分查找、在排序数组中查找元素的第一个和最后一个位置、搜索插入位置、x 的平方根
c++·算法