zoukankan      html  css  js  c++  java
  • 11. Container With Most Water

    ▶ 问题:给定数组 { ai,i = D1n },求 ( j - i ) * | aj - ai | 的最大值。

    ▶ 算法:考虑 ai 和 ai+1,若 ai ≥ ai+1 则显然选 ai 比选 ai+1 更好;若 ai < ai+1,则我们需要比较 ( j - i ) * | aj - ai | 和 ( j - i - 1 ) * | aj - ai+1 | 的大小,再在两项之间选择。同理考虑 aj 和 aj+1。我们使用两个指针,开始时分别指向数组的首元素和末元素,利用上述方法不断交替将两指针向内靠拢,并用一个整形变量记录这一过程中能够达到的面积的最大值,当两指针重叠时,靠拢结束,输出记录的面积值。

    ● 代码,19 ms,最快的解法算法与之相同

     1 class Solution
     2 {
     3 public:
     4     int maxArea(vector<int>& height)
     5     {
     6         int output = 0, temp, old;
     7         for (int i = 0, j = height.size() - 1; i < j;)
     8         {
     9             temp = (j - i)*(height[i] < height[j] ? height[i] : height[j]);
    10             output = output > temp ? output : temp;
    11             if (height[i]<height[j])
    12                 for (old = height[i]; i < j && height[i] <= old; ++i);
    13             else
    14                 for (old = height[j]; i < j && height[j] <= old; --j);
    15         }
    16         return output;
    17     }
    18 };
  • 相关阅读:
    C# Func的同步、异步调用
    C#以管理员身份运行程序
    C# 代码编程规范
    C# DES加密解密
    C# MD5加密
    EntityFramework查询--联合查询(Join,GroupJoin)
    C# 图片和Base64之间的转换
    php 验证身份证号
    Vue环境搭建
    PHP 3种方法实现采集网站数据
  • 原文地址:https://www.cnblogs.com/cuancuancuanhao/p/8127675.html
Copyright © 2011-2022 走看看