chore(Java): add trapped rain water (#367)

pull/351/head
Aayush 2021-06-24 17:48:22 +05:30 committed by GitHub
parent 5d443c7fbd
commit 7d4045769e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 92 additions and 0 deletions

View File

@ -9,6 +9,7 @@
5. [Majority Element](arrays/majority-element.java) 5. [Majority Element](arrays/majority-element.java)
6. [Longest Consecutive Subsequence](arrays/longest-consecutive-subsequence.java) 6. [Longest Consecutive Subsequence](arrays/longest-consecutive-subsequence.java)
7. [K-th Element of Two Sorted Arrays](arrays/kth-element-2sorted-array.java) 7. [K-th Element of Two Sorted Arrays](arrays/kth-element-2sorted-array.java)
8. [Trapping Rain Water](arrays/trapping-rain-water.java)
## Graphs ## Graphs

View File

@ -0,0 +1,91 @@
// Given an array arr[] of N non-negative integers representing the height of blocks.
// If width of each block is 1, compute how much water can be trapped between the blocks during the rainy season.
//Time Complexity: O(N)
//Auxiliary Space: O(1)
import java.io.*;
import java.util.*;
import java.lang.*;
class Main {
public static void main (String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine().trim()); //Inputting the testcases
while(t-->0){
//size of array
int n = Integer.parseInt(br.readLine().trim());
int arr[] = new int[n];
String inputLine[] = br.readLine().trim().split(" ");
//adding elements to the array
for(int i=0; i<n; i++){
arr[i] = Integer.parseInt(inputLine[i]);
}
Solution obj = new Solution();
//calling trappingWater() function
System.out.println(obj.trappingWater(arr, n));
}
}
}
class Solution{
// arr: input array
// n: size of array
// Function to find the trapped water between the blocks.
static int trappingWater(int arr[], int n) {
// initialize output
int result = 0;
// maximum element on left and right
int left_max = 0, right_max = 0;
// indices to traverse the array
int lo = 0, hi = n - 1;
while (lo <= hi) {
if (arr[lo] < arr[hi]) {
if (arr[lo] > left_max)
// update max in left
left_max = arr[lo];
else
// water on curr element = max - curr
result += left_max - arr[lo];
lo++;
}
else {
if (arr[hi] > right_max)
// update right maximum
right_max = arr[hi];
else
result += right_max - arr[hi];
hi--;
}
}
return result;
}
}
/* Test Case:
Input:
N = 6
arr[] = {3,0,0,2,0,4}
Output:
10
Explanation:
____|
| |
| | |
| | |
300204
Total Water Trapped: 3+3+1+3 = 10
*/