【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,保存值比较大的那一个
相关推荐
第七序章25 分钟前
【C + +】unordered_set 和 unordered_map 的用法、区别、性能全解析
数据结构·c++·人工智能·算法·哈希算法·1024程序员节
草莓熊Lotso35 分钟前
《算法闯关指南:优选算法--二分查找》--23.寻找旋转排序数组中的最小值,24.点名
开发语言·c++·算法·1024程序员节
文火冰糖的硅基工坊41 分钟前
[嵌入式系统-150]:智能机器人(具身智能)内部的嵌入式系统以及各自的功能、硬件架构、操作系统、软件架构
android·linux·算法·ubuntu·机器人·硬件架构
郝学胜-神的一滴1 小时前
主成分分析(PCA)在计算机图形学中的深入解析与应用
开发语言·人工智能·算法·机器学习·1024程序员节
py有趣1 小时前
LeetCode学习之0矩阵
学习·leetcode·矩阵
鸽鸽程序猿1 小时前
【算法】【动态规划】斐波那契数模型
算法·动态规划·1024程序员节
Samuel-Gyx2 小时前
数据结构--顺序表与链表
数据结构·算法·链表·1024程序员节
小年糕是糕手2 小时前
【数据结构】队列“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法
无限进步_2 小时前
【C语言】函数指针数组:从条件分支到转移表的优雅进化
c语言·开发语言·数据结构·后端·算法·visual studio