House Robber III šŸŽÆ

beginner
10 min

House Robber III šŸŽÆ

Welcome to our comprehensive guide on the House Robber III problem, a classic algorithmic puzzle that's both fun and practical! This tutorial is designed for beginners and intermediates, so let's dive right in. šŸ“

Introduction

The House Robber III problem is an extension of the famous House Robber and House Robber II problems. It involves a sequence of houses with an arbitrary length, and you are a burglar who wants to maximize your loot by robbing the most valuable houses.

Problem Statement

Given an array of integers arr representing the value of each house, and two integers k and n, where k is the starting index of the house you start at, and n is the number of houses you can rob in a single trip (i.e., moving from one end of the array to the other).

Your task is to find the maximum amount of money you can steal by only robbing k house and every nth house thereafter, ensuring you don't rob two consecutive houses.

Example

Let's consider an example:

arr = [2, 7, 9, 3, 1] k = 2 n = 2

In this case, you can rob the following houses: [9, 3]. The total loot would be 9 + 3 = 12.

Solution Approach

To solve the House Robber III problem, we will use dynamic programming, which is a common technique for solving optimization problems like this one. We'll create an array dp of size n+1 to store the maximum amount of money that can be stolen ending at each house.

Pseudo Code

function rob(arr, k, n): if len(arr) == 0: return 0 dp = [0] * (n+1) dp[k] = arr[k] for i in range(k+1, n+1): dp[i] = max(dp[i-1], dp[i-n] + arr[i]) return dp[n]

Code Examples

Python

python
def rob(arr, k, n): if not arr: return 0 dp = [0] * (n+1) dp[k] = arr[k] for i in range(k+1, n+1): dp[i] = max(dp[i-1], dp[i-n] + arr[i]) return dp[n]

Java

java
int rob(int[] arr, int k, int n) { if (arr.length == 0) return 0; int[] dp = new int[n+1]; dp[k] = arr[k]; for (int i = k+1; i <= n; i++) { dp[i] = Math.max(dp[i-1], dp[i-n] + arr[i]); } return dp[n]; }

šŸ’” Pro Tip:

  • Remember to handle edge cases carefully. For example, if n is greater than the length of the array, you should return 0.

Quiz

Quick Quiz
Question 1 of 1

Given the array `[1, 2, 3, 1, 2, 3]`, `k = 3`, and `n = 2`, what's the maximum amount of money that can be stolen?