扫描leftmost和rightmost

class Solution {
public:
    int trap(int A[], int n) {
        if(n < 3) return 0;
        vector<int> left(n , 0);
        vector<int> right(n , 0);
        
        //left most
        for(int i = 1 ; i < n ; i++) {
            left[i] = max(left[i-1] , A[i-1]);
        }
        //right most
        for(int i = n- 2 ; i >= 0 ; i--) {
            right[i] = max(right[i + 1] , A[i+1]);
        }
        int sum = 0;
        for(int i = 0 ; i < n ; i++) {
            int maxH = min(left[i] , right[i]);
            if(maxH > A[i]) sum += maxH - A[i];
        }
        
        return sum;
        
    }
};

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-09
  • 2021-10-01
  • 2022-03-06
  • 2022-01-13
  • 2021-11-18
  • 2022-02-16
  • 2021-10-11
  • 2021-06-30
相关资源
相似解决方案