二重ポインター:最も多くの水を保持しているコンテナー(4.18leetcode、1日に1つの質問)

n個の負でない整数a1、a2、...、anが与えられ、各数値は座標の点(i、ai)を表します。座標にn本の垂直線を描画します。垂直線iの2つの端点は(i、ai)と(i、0)です。2本の線を見つけ、x軸でそれらが形成するコンテナが最も多くの水を保持できるようにします。
注:コンテナーを傾けることはできず、nの値は2以上です。

例:

入力: [1,8,6,2,5,4,8,3,7]
 出力: 49 
アイデア:ダブルポインター、コードが明確で理解しやすいことを確認
1  int maxArea(vector < int >&height) 
 2      {
 3          int res = 0 ;
4          int i = 0 ;
5          int j = height.size()- 1 ;
6  
7          while(i < j)
 8          {
 9              int area =(ji)* min(height [i]、height [j]);
10              res = max(area、res);
11              if(height [i] < height [j])
 12              {
 13                 i ++ ;
14              }
 15              else 
16              {
 17                  j-- ;
18              }
 19          }
 20          リターン解像度。
21      }

 




 

おすすめ

転載: www.cnblogs.com/ZhengLijie/p/12724121.html