Lesson 6
Mastering HashMaps for Efficient Problem Solving in Java Algorithmic Interviews
Introduction to the Lesson

Welcome back! Today, we're sharpening our algorithmic problem-solving skills, focusing on HashMaps in Java. Imagine HashMaps as the backbone of a social network app, ensuring that each user's data remains unique and instantly accessible. By the close of this lesson, you will be equipped to use Java's HashMap to efficiently solve problems that might otherwise seem daunting due to their complexity or data size.

Problem 1: Majority Element Finder

Our journey begins with the Majority Element Finder. You're handed an array of integers, and your mission is simple yet intriguing: determine whether this array has a celebrity element. This integer appears more frequently than all others combined. More formally, we are looking for an element appearing more than n/2 times.

Problem 1: Problem Actualization

Why does this matter? Well, consider analyzing sales data to determine the most sold product in an online marketplace—knowing the majority of products could streamline marketing strategies and inventory management. That's the real-world relevance of the majority element problem.

Problem 1: Efficient Approach Explanation

Now, let's be savvy about this. Enter the HashMap: your sophisticated voting tally system. With it, you can keep a running total of each product's sales as you go through the transaction list once rather than reviewing the entire list for each product. It grants us the speed of an experienced cashier who knows customers' habits by heart.

Problem 1: Solution Building

Let's dissect the process in our election analogy step by step:

Java
1HashMap<Integer, Integer> countMap = new HashMap<>(); 2int majorityThreshold = arr.length / 2;

Here, we're preparing our HashMap, akin to setting up our ballot boxes and establishing the majority threshold — the number of votes needed to win the election by a landslide.

Java
1for (int num : arr) { 2 countMap.put(num, countMap.getOrDefault(num, 0) + 1);

We're recording every vote cast in our HashMap ledger. Each key is a unique product, and the value is the current total of received votes.

Java
1 if (countMap.get(num) > majorityThreshold) { 2 return num; 3 }

Once a product's vote count exceeds the threshold — signaling a majority — our search concludes, akin to declaring a winner!

Java
1return -1;

If the polling ends with no majority victor, we return -1, signifying a contested market where no single product dominates.

Problem 2: Keyword Index Creator

Imagine you are building a search feature for an app, and you need a function that quickly retrieves all documents where a certain keyword is present. If you have ever searched for something using your browser's Ctrl+F or Command+F function, you have utilized such an index! Our task is to create a dictionary that behaves like an index, mapping a keyword to all the documents where it can be found.

Problem 2: Problem Actualization

This capability is the cornerstone of search engines or reference databases — offering instant results when you look up a word or phrase. Indexing is an unsung hero in big data, where speed is invaluable.

Problem 2: Efficient Approach Explanation

Our HashMap steps in as our digital librarian, capable of cataloging every word and its locations at a fantastic clip. It's the magic behind the fast search results we often take for granted.

Problem 2: Solution Building

Let's delve into our code, assembling our digital index:

Java
1HashMap<String, List<Integer>> index = new HashMap<>();

This line can be likened to opening a new spreadsheet where each row represents a distinct word, and the columns list the document numbers where the word appears.

Java
1for (int i = 0; i < docs.length; i++) { 2 String[] words = docs[i].split(" "); 3 for (String word : words) {

Here, we're flipping through each document and dissecting it into individual words. It's parallel to scanning each page of our metaphorical book.

Java
1 if (!word.isEmpty()) { 2 List<Integer> docIndices = index.getOrDefault(word, new ArrayList<>()); 3 docIndices.add(i); 4 index.put(word, docIndices); 5 } 6 } 7}

For every word we encounter, we pinpoint its listing or create one if it's new. Then, we're cross-referencing the document index, much like jotting down on which page a topic is discussed.

Java
1return index;

And with that, our index is complete, a feat many times quicker than doing so manually and without the risk of paper cuts!

Lesson Summary

To wrap up, we've tackled two distinctive algorithmic interview problems, employing HashMaps to our advantage. From deducing the majority winner among a sea of data to compiling a comprehensive keyword index, you now glimpse the robustness and efficiency that HashMaps brings. It's time to roll up your sleeves as we transition from theory to hands-on practice!

Enjoy this lesson? Now it's time to practice with Cosmo!
Practice is how you turn knowledge into actual skills.