zoukankan      html  css  js  c++  java
  • Trapping Rain Water [LeetCode]

    Problem Description: http://oj.leetcode.com/problems/trapping-rain-water/

    Basic idea: Get the index of max number of the array, then split the array at that point. Find the left max num, calcaute the water trapped between left max num and the max num. Go left recursively until meeting the start of the array. Do the same thing to the right part.

     1 class Solution {
     2 public:
     3     int findMax(int A[], int n) {
     4         int max = A[0];
     5         int max_index = 0;
     6         for(int i = 0; i < n; i++) {
     7             if (A[i] > max){
     8                 max = A[i];
     9                 max_index = i;
    10             }
    11         }
    12         return max_index;
    13     }
    14     
    15     int trap(int A[], int n) {
    16         // Note: The Solution object is instantiated only once and is reused by each test case.
    17         if(n <= 2)
    18             return 0;
    19 
    20         int max_index = findMax(A, n);
    21         int water = 0;
    22       
    23         int i = max_index;
    24         while(i >= 2){
    25             int left_max_index = findMax(A, i - 1 + 1);
    26             //calculate water between left_max and max
    27             for(int j = left_max_index + 1; j < i; j ++)
    28                 water += A[left_max_index] - A[j];
    29             
    30             i = left_max_index;
    31         }
    32         
    33         i = max_index;
    34         while( n - (i + 1) >= 2){
    35             int right_max_index = findMax(A + i + 1, n - i - 1) + i + 1;
    36             //calculate water between right_max and max
    37             for(int j = i + 1; j < right_max_index; j++)
    38                 water += A[right_max_index] - A[j];
    39             
    40             i = right_max_index;
    41         }
    42         
    43         return water;
    44     }
    45 };

  • 相关阅读:
    图形
    附属信息
    文件操作
    字符编码
    Python数据类型之基础记。。。
    python并发编程之多进程
    python并发编程之多进程
    计算机基础之计算机系统的简单了解。
    元类
    基于socketserver模块实现并发tcp/udp
  • 原文地址:https://www.cnblogs.com/guyufei/p/3380473.html
Copyright © 2011-2022 走看看