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.
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.
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.
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.
Let's dissect the process in our election analogy step by step:
Java1HashMap<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.
Java1for (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.
Java1 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!
Java1return -1;
If the polling ends with no majority victor, we return -1, signifying a contested market where no single product dominates.
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.
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.
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.
Let's delve into our code, assembling our digital index:
Java1HashMap<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.
Java1for (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.
Java1 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.
Java1return index;
And with that, our index is complete, a feat many times quicker than doing so manually and without the risk of paper cuts!
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!