程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode題解||Container With Most Water問題

leetcode題解||Container With Most Water問題

編輯:關於C++

problem:

 

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.

X軸為底,兩個縱軸為變,求容器的容積,短邊是瓶頸。

 

 

thinking:

(1)短邊決定水箱的有效高,底要盡可能的寬。

(2)典型的雙指針求解的題型。

(3)貪心的策略,哪條邊短,往裡收縮尋找下一條邊。

code:

 

class Solution {
public:
    int maxArea(vector &height) {
        // Start typing your C/C++ solution below
        // DO NOT write int main() function
        int i = 0;
        int j = height.size() - 1;
        
        int ret = 0;
        while(i < j)
        {
            int area = (j - i) * min(height[i], height[j]);
            ret = max(ret, area);
            
            if (height[i] <= height[j])
                i++;
            else
                j--;
        }
        
        return ret;
    }
};

 

時間復雜度為O(n)

 


暴力破解法:時間復雜度為O(n*n)

 

int area(vector::iterator &a,vector::iterator &b)
{
    return (b-a)*(*a>*b?*b:*a);

}

class Solution {
public:
    int maxArea(vector &height) {
        int max_area=0;
        for(vector::iterator i=height.begin()+1;i!=height.end();i++)
        {
            for(vector::iterator j=height.begin();j!=i;j++)
            {
                max_area=max(max_area,area(j,i));
            }
        }
        return max_area;


    }
};


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved