Skip to content

Commit 18f5707

Browse files
committed
question 2
1 parent 21a632c commit 18f5707

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

code2.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#include <stdio.h>
2+
#include <vector>
3+
#include <string>
4+
#include <vector>
5+
#include <list>
6+
#include <map>
7+
#include <set>
8+
#include <queue>
9+
#include <deque>
10+
#include <stack>
11+
#include <bitset>
12+
#include <algorithm>
13+
#include <functional>
14+
#include <numeric>
15+
#include <utility>
16+
#include <sstream>
17+
#include <iostream>
18+
#include <iomanip>
19+
#include <cstdio>
20+
#include <cmath>
21+
#include <cstdlib>
22+
#include <ctime>
23+
24+
using namespace std;
25+
26+
//有一块矩形土地被划分成 N×M 个正方形小块,每块是一平方米。这些小块高低不平,
27+
//每一小块地都有自己的高度H(i, j)米。水可以由任意一块地流向周围四个方向的四块地中,
28+
//但不能直接流入对角相连的小块中。一场大雨后,许多低洼地方都积存了不少降水,求出它最多能积存多少立方米的降水么?
29+
int trap(int* a, int n)
30+
{
31+
if ( a == NULL || n == 0 )
32+
return 0;
33+
int* left = new int[n];
34+
if ( left == NULL )
35+
return 0;
36+
int* right = new int[n];
37+
if ( right == NULL )
38+
return 0;
39+
40+
int maxL = 0;
41+
for ( int i = 0 ; i < n-1; i++ )
42+
{
43+
left[i] = maxL;
44+
maxL = max(maxL, a[i]);
45+
}
46+
47+
int maxR = 0;
48+
for ( int i = n-1; i >= 0; i-- )
49+
{
50+
right[i] = maxR;
51+
maxR = max(maxR, a[i]);
52+
}
53+
54+
int res = 0;
55+
for ( int i = 0 ; i < n-1 ;i++)
56+
{
57+
int v = min(left[i], right[i]) - a[i];
58+
if ( v > 0 )
59+
res += v;
60+
}
61+
delete[] left;
62+
delete[] right;
63+
return res;
64+
}

0 commit comments

Comments
 (0)