Container With Most Water

Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container and n is at least 2.

Subscribe to see which companies asked this question

这个题目的意思可能不是很好懂,这个题的意思是给一个整数的数组,例如【0,1,4,5,2,6】 0代表直线的高度是0,1代表高度是1……两个数字坐标的相对位置代表的是宽度,高度和宽度组成一个木桶,求给定数组所有木桶组合能盛放的最多的水的面积。

以上一个数组中的4和6为例:
4和6 中相对最小的数字【4】代表高度【木桶原理】
4和6的相对位置【5-2】代表宽度,那么这个组合的容积就应该是
4*3=12
求出最大的容积。

第一种也是最好想到的方法双层循环穷举所有组合,返回最大即可,java代码如下:

 public static int maxArea(int[] height) {
        int max =0;
        for(int i=0;i<height.length;i++){
             for(int j=i;j<height.length;j++){
              int maxHeight=
                 height[i]>height[j]?height[j]:height[i];
                if(maxHeight*(j-i)>max){
                    max = maxHeight*(j-i);
                    System.err.println(j + ":" +i);
                }
             }  
        }
        return max;
    }

这种解法无疑是正确的,但是无疑也是最低效的,时间复杂度达到O(n2),提交也被驳回,理由是时间不能接受。

那么有没有o(n)的解法呢?答案是有的,定义两个指针,从两边向中间移动,low high,如果high处的高度大于low,则low+1,反之则high-1, java代码如下:

 public static int maxArea1(int[] height) {
        if (height.length < 2) return 0; 
        int max =0;
        int low =0;
        int high=height.length-1;
        while(high>low){
            int maxHight = height[high]>height[low]?height[low]:height[high];
            if(maxHight*(high-low)>max){
                max =maxHight*(high-low);
            }
            if(height[high]>height[low])  low++;  else high--;
        }
        return max;
    }

时间复杂度为 O(n)

内容概要:本文详细介绍了深度学习的基本概念和技术要点,涵盖了从基础知识到高级模型的多个方面。首先,文中强调了激活函数与权重初始化的最佳实践,如ReLU搭配He初始化,Sigmoid或Tanh搭配Xavier初始化。接着,文章系统地讲解了深度学习所需的数学基础(线性代数、微积分、概率统计)、编程技能(Python、PyTorch/TensorFlow)以及机器学习基础(监督学习、无监督学习、常见算法)。此外,还深入探讨了神经网络的核心组件,包括前向传播、反向传播、激活函数、优化算法、正则化方法等,并特别介绍了卷积神经网络(CNN)、循环神经网络(RNN)、长短期记忆网络(LSTM)、注意力机制(Attention)、Transformer架构及其衍生模型(BERT、GPT)。最后,文章讨论了大模型训练、分布式训练、模型压缩、Prompt Engineering、文本生成、多模态学习等前沿话题,并提供了学习资源推荐。 适合人群:对深度学习有一定兴趣并希望深入了解其原理的研究人员、工程师或学生,尤其是那些具备一定编程基础和数学知识的人群。 使用场景及目标:①帮助读者理解深度学习中的关键概念和技术细节;②指导读者如何选择合适的激活函数和权重初始化方法;③为读者提供构建和优化神经网络模型的实际操作指南;④介绍最新的研究进展和发展趋势,拓宽读者视野。 其他说明:建议读者在学习过程中结合实际案例进行练习,积极尝试文中提到的各种技术和工具,同时关注领域内的最新研究成果,以便更好地掌握深度学习的应用技巧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专注网赚的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值