LeetCode_41trap [Trapping Rain Water]

#pragma warning(disable:4996)

#include <cstdio>
#include <tchar.h>
#include <Windows.h>

/*
	submit time : 3
		1.Time Limit Exceeded
			Last executed input:	[]
		2.Cant‘s remember
	request :
		Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

		For example,
		Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6.
*/

int helpMin(int i, int j) {
	return i < j ? i : j;
}

void helpTrap(int& water, int* data, int length, int l, int r) {
	if (r - l <= 1) return;		// do not calculate one or two numbers

	// find two biggest numbers
	int big1value = 0, big2value = 0;
	int big1index = 0, big2index = 0;
	int vernier = l;
	while (vernier <= r) {
		if (data[vernier] >= big1value) {
			if (data[vernier] >= big2value) {
				big1index = big2index;
				big1value = big2value;
				big2index = vernier;
				big2value = data[vernier];
			}
			else {
				big1index = vernier;
				big1value = data[vernier];
			}
		}
		++vernier;
	}

	// calculate current trap
	int lr = helpMin(big1index, big2index), rl = big1index + big2index - lr;
	int currWater = 0;
	vernier = lr;
	while (++vernier < rl)
		water += (big1value - data[vernier]);

	// calculate other two sides
	helpTrap(water, data, length, l, lr);
	helpTrap(water, data, length, rl, r);
}

int trap(int A[], int n) {
	if (A == NULL || n <= 2) return 0;

	int water = 0;
	helpTrap(water, A, n, 0, n - 1);

	return water;
}

//============Test==================
void Test(const char* testName, int* data, int length) {
	printf("%s begins:\n", testName);

	int result = trap(data, length);
	printf("%d\n", result);
}

void Test1() {
	int data[] = { 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 };
	Test("Test1", data, sizeof(data) / sizeof(int));
}

void Test2() {
	int data[] = { 0, 1, 2, 3, 3, 3, 3, 3, 2, 1 };
	Test("Test2", data, sizeof(data) / sizeof(int));
}

void Test3() {
	int data[] = { 0, 1, 2, 3, 4, 5, 1, 2 };
	Test("Test3", data, sizeof(data) / sizeof(int));
}

void Test4() {
	int data[] = { 100, 0,0,1,0,0, 1000 };
	Test("Test4", data, sizeof(data) / sizeof(int));
}

void Test5() {
	int data[] = { 5,2,1,2,1,5 };
	Test("Test5", data, sizeof(data) / sizeof(int));
}

int _tmain(int argc, _TCHAR* argv[]) {
	Test1();
	Test2();
	Test3();
	Test4();
	Test5();

	system("pause");
	return 0;
}

LeetCode_41trap [Trapping Rain Water]

时间: 2024-08-08 07:52:36

LeetCode_41trap [Trapping Rain Water]的相关文章

有意思的数学题:Trapping Rain Water

LeetCode传送门 https://leetcode.com/problems/trapping-rain-water/ 目标:找出积木能容纳的水的“面积”,如图中黑色部分是积木,蓝色为可容纳水的部分 假设:积木宽度均为1 输入:各个积木的高度 输出:所有积木能容纳水的“面积” 思考过程 1. 逐一求积木的间隔似乎不太容易.特别对于图中3-7积木间的容积,如果可以先求底部(4-6间)的容积,当求解上层(3-7)的容积时,还需要做额外的处理,如减掉底部的高度. 2. 既然如此,可否先求出3-7

[LeetCode][JavaScript]Trapping Rain Water

Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map

[LintCode] Trapping Rain Water II

Trapping Rain Water II Given n x m non-negative integers representing an elevation map 2d where the area of each cell is 1 x 1, compute how much water it is able to trap after raining. Example Given 5*4 matrix [12,13,0,12] [13,4,13,12] [13,8,10,12] [

Leetcode 407. Trapping Rain Water II

Given an m x n matrix of positive integers representing the height of each unit cell in a 2D elevation map, compute the volume of water it is able to trap after raining. Note:Both m and n are less than 110. The height of each unit cell is greater tha

Trapping Rain water 诸多细节须注意

Trapping Rain Water Total Accepted: 35650 Total Submissions: 118319My Submissions Question Solution Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining.

LeetCode 042 Trapping Rain Water

题目要求:Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevatio

[leetcode]Trapping Rain Water @ Python

原题地址:https://oj.leetcode.com/problems/trapping-rain-water/ 题意: Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,

Leetcode 动态规划 Trapping Rain Water

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Trapping Rain Water Total Accepted: 14568 Total Submissions: 50810My Submissions Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much wate

【leetcode】Trapping Rain Water

Trapping Rain Water Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map