• C++LeetCode:: Container With Most Water


    本来写的题目不是这个,而是字符串匹配,考虑了很多情况写了很久最后看了solution,发现可以用动态规划做。感觉被打击到了,果断先放着重新写一个题,后面心情好了再重新写吧,难过。每天都要被LeetCode打击一次。自“抱”自“泣”,逻辑推理能力太差了。

    题目:

    Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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.

    面积取决于两个因素,一个是两个点的横坐标差值,另一个是两个点中的最小值。设置两个指针,分别表示数组的头和尾,首先计算这两个点的所构成长方形的面积,然后移动两点中较小数的指针向前(头指针)或退后(尾指针),因为如果移动的是两点中较大那个数的指针的话,两个点横坐标变小,两个点中最小值变小或者不变,那么长方形面积肯定变小,这样的计算是多余的。重复上述过程知道首尾指针相遇,记录该过程中的面积最大值就是结果。

    class Solution {
    public:
        int maxArea(vector<int>& height) {
            int i = 0, j = height.size()-1;
            int current = 0, bigest = 0;
            while(i<j){
                current = (j-i) * (height[i]>height[j]?height[j--]:height[i++]);
                bigest = bigest>current?bigest:current;
            }
            return bigest;
        }
    };
    

      看了一下运行最快的代码,思路一样,估计测试用例不一样导致运行时间不一样。

  • 相关阅读:
    工序打扎流程(自定义按钮移动、群响应。)
    将FAT磁盘转化为NTFS格式。
    VC监视新硬件插入电脑。
    VC读取分析网络文件
    工序打扎流程(箭头实现、刷新画面)
    VC实现自定义按钮响应拖动
    VC中ListCtrl经验总结【转载】
    C++的优先级
    VC画面闪烁及解决方法
    改变 CListCtrl、CHeaderCtrl 高度、字体、颜色和背景
  • 原文地址:https://www.cnblogs.com/catpainter/p/8483535.html
Copyright © 2020-2023  润新知