Top 10 HashMap Coding Problems (with Solutions)
1. Two Sum Problem
Find two numbers in an array that sum to a target value.
Code:
int[] twoSum(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < [Link]; i++) {
int complement = target - nums[i];
if ([Link](complement)) {
return new int[]{[Link](complement), i};
}
[Link](nums[i], i);
}
return new int[]{-1, -1};
}
2. First Non-Repeating Character
Return the first character that appears only once.
Code:
char firstNonRepeat(String s) {
Map<Character, Integer> map = new LinkedHashMap<>();
for (char c : [Link]()) [Link](c, [Link](c, 0) + 1);
for (var entry : [Link]()) if ([Link]() == 1) return [Link]();
return '_';
}
3. Find All Duplicates in an Array
Return elements that appear more than once.
Code:
List<Integer> findDuplicates(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
List<Integer> res = new ArrayList<>();
for (int n : nums) {
[Link](n, [Link](n, 0) + 1);
}
for (var e : [Link]()) {
if ([Link]() > 1) [Link]([Link]());
}
return res;
}
4. Most Frequent Element in Array
Find the most frequent element.
Code:
int mostFrequent(int[] nums) {
Map<Integer, Integer> map = new HashMap<>();
for (int n : nums) [Link](n, [Link](n, 0) + 1);
int maxKey = nums[0];
for (var e : [Link]()) if ([Link]() > [Link](maxKey)) maxKey = [Link]();
return maxKey;
}
5. Group Anagrams
Group all anagrams together.
Code:
List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for (String s : strs) {
char[] ch = [Link]();
[Link](ch);
String key = new String(ch);
[Link](key, k -> new ArrayList<>()).add(s);
}
return new ArrayList<>([Link]());
}
6. Check Anagram
Check if two strings are anagrams.
Code:
boolean isAnagram(String s, String t) {
if ([Link]() != [Link]()) return false;
Map<Character, Integer> map = new HashMap<>();
for (char c : [Link]()) [Link](c, [Link](c, 0) + 1);
for (char c : [Link]()) {
[Link](c, [Link](c, 0) - 1);
if ([Link](c) < 0) return false;
}
return true;
}
7. Subarray Sum Equals K
Count subarrays with sum = K.
Code:
int subarraySum(int[] nums, int k) {
Map<Integer, Integer> map = new HashMap<>();
[Link](0, 1);
int count = 0, sum = 0;
for (int n : nums) {
sum += n;
if ([Link](sum - k)) count += [Link](sum - k);
[Link](sum, [Link](sum, 0) + 1);
}
return count;
}
8. Longest Substring Without Repeating Characters
Find length of longest substring without repeating characters.
Code:
int lengthOfLongestSubstring(String s) {
Map<Character, Integer> map = new HashMap<>();
int left = 0, maxLen = 0;
for (int right = 0; right < [Link](); right++) {
char c = [Link](right);
if ([Link](c) && [Link](c) >= left)
left = [Link](c) + 1;
[Link](c, right);
maxLen = [Link](maxLen, right - left + 1);
}
return maxLen;
}
9. Intersection of Two Arrays
Find intersection of two arrays.
Code:
int[] intersect(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>();
List<Integer> res = new ArrayList<>();
for (int n : nums1) [Link](n, [Link](n, 0) + 1);
for (int n : nums2) {
if ([Link](n, 0) > 0) {
[Link](n);
[Link](n, [Link](n) - 1);
}
}
return [Link]().mapToInt(i -> i).toArray();
}
10. Word Frequency Counter
Count frequency of words in a sentence.
Code:
Map<String, Integer> wordFrequency(String text) {
Map<String, Integer> map = new HashMap<>();
String[] words = [Link]("\\s+");
for (String w : words) [Link](w, [Link](w, 0) + 1);
return map;
}