Trapping Rain Water

July 29, 2020

Trapping rain water ilk bakışta görmek zor ancak şu şekilde düşünülebilir.

Engel uzunluklarını B dizisi ile ifade edelim. Herhangi bir i noktasındaki biriken su miktarına X(i) dersek

$$ X(i) = Min( max( B[k] k > i) , max(B[k] k < i ))) - B[i] $$

Bir noktanın sağındaki ve solundaki en uzun engelleri önceden hesaplarsak biz O(n) zamanlı çözümü verir.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
int trap(vector<int>& arr) {
    int fw = 0, bw = 0, sum = 0, len = arr.size();
    int forward[len], backward[len];

    for (int i = 0; i < len; i++){
        // noktanın solundaki en uzun engel uzunluğu
        fw = max(arr[i], fw), forward[i] = fw;
        // noktanın sağındaki en uzun engel uzunluğu
        bw = max(arr[len - i - 1], bw), backward[len - i - 1] = bw;
    }

    for (int i = 0; i < len; i++) 
        sum += min(forward[i], backward[i]) - arr[i];

    return sum;
}

hidden

The Review Is the Action Item

2024/05/30The Review Is the Action ItemI like to consider running an incident review to be its own action item. Other follow-ups emerging from it are a plus, but the point is to learn from incidents, and the review gives room for that to happen.This is no…

via Ferd.ca

Finding a New Software Developer Job

For the first time ever, I was laid off, and had to find a new software developer job. I managed to find a new one, but it took longer than I thought, and it was a lot of work. I … Continue reading →

via Henrik Warne's blog

HOWTO: Change your behavior

In theory, behavior change should be easy. At first glance, it seems like you control your behavior. So, if you desire different behavior, why doesn’t your behavior change as instantly as your desire to change it? In short, lasting change of habitual behavio…

via Matt Might's blog