This is a more difficult version of problem 82, and now you can move in all four directions!
As before, we start by loading the input data into a 2D array:
and initialize another matrix of the same size to hold the minimum sum leading to each cell:
What we have done differently this time though, is to choose initial defaults:
- for the top-left corner (0, 0) the minimum sum is itself
- for all other cells at (row, col) we’ll always traverse right and then down
- if row = 0, then this equates to only move right until we reach col
- if col = 0, then this equates to only move down until we reach row
Next, as we did for the problem 82, we’ll add a couple of helper to help us traverse both matrices:
and we’ll find the new minimum sum to each cell by taking the minimum from the four directions:
Unlike before, we can’t isolate to optimizing one column at a time, and instead we’ll need to traverse the whole matrix. For better cache locality, we’ll traverse row first and recursively optimize the whole matrix until no more optimization is possible:
Finally, find the final value for the bottom-right corner of the sum matrix:
This solution runs in 73ms on my laptop.
The source code for this solution is here.
I’m an AWS Serverless Hero and the author of Production-Ready Serverless. I have run production workload at scale in AWS for nearly 10 years and I have been an architect or principal engineer with a variety of industries ranging from banking, e-commerce, sports streaming to mobile gaming. I currently work as an independent consultant focused on AWS and serverless.
Here is a complete list of all my posts on serverless and AWS Lambda. In the meantime, here are a few of my most popular blog posts.
- Lambda optimization tip – enable HTTP keep-alive
- You are thinking about serverless costs all wrong
- Many faced threats to Serverless security
- We can do better than percentile latencies
- I’m afraid you’re thinking about AWS Lambda cold starts all wrong
- Yubl’s road to Serverless
- AWS Lambda – should you have few monolithic functions or many single-purposed functions?
- AWS Lambda – compare coldstart time with different languages, memory and code sizes
- Guys, we’re doing pagination wrong