Skip to content

Commit 4008ef0

Browse files
authored
Merge branch 'master' into testing/AverageTest
2 parents 26225ba + dcb02c6 commit 4008ef0

File tree

2 files changed

+41
-28
lines changed

2 files changed

+41
-28
lines changed

src/main/java/com/thealgorithms/datastructures/hashmap/hashing/Intersection.java

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,60 +8,66 @@
88

99
/**
1010
* The {@code Intersection} class provides a method to compute the intersection of two integer arrays.
11-
* The intersection is defined as the set of common elements present in both arrays.
1211
* <p>
13-
* This class utilizes a HashMap to efficiently count occurrences of elements in the first array,
14-
* allowing for an efficient lookup of common elements in the second array.
12+
* This intersection includes duplicate values — meaning elements are included in the result
13+
* as many times as they appear in both arrays (i.e., multiset intersection).
1514
* </p>
1615
*
1716
* <p>
18-
* Example:
19-
* <pre>
17+
* The algorithm uses a {@link java.util.HashMap} to count occurrences of elements in the first array,
18+
* then iterates through the second array to collect common elements based on these counts.
19+
* </p>
20+
*
21+
* <p>
22+
* Example usage:
23+
* <pre>{@code
2024
* int[] array1 = {1, 2, 2, 1};
2125
* int[] array2 = {2, 2};
22-
* List<Integer> result = Intersection.intersection(array1, array2); // result will contain [2, 2]
23-
* </pre>
26+
* List<Integer> result = Intersection.intersection(array1, array2); // result: [2, 2]
27+
* }</pre>
2428
* </p>
2529
*
2630
* <p>
27-
* Note: The order of the returned list may vary since it depends on the order of elements
28-
* in the input arrays.
31+
* Note: The order of elements in the returned list depends on the order in the second input array.
2932
* </p>
3033
*/
3134
public final class Intersection {
3235

36+
private Intersection() {
37+
// Utility class; prevent instantiation
38+
}
39+
3340
/**
34-
* Computes the intersection of two integer arrays.
41+
* Computes the intersection of two integer arrays, preserving element frequency.
42+
* For example, given [1,2,2,3] and [2,2,4], the result will be [2,2].
43+
*
3544
* Steps:
36-
* 1. Count the occurrences of each element in the first array using a HashMap.
37-
* 2. Iterate over the second array and check if the element is present in the HashMap.
38-
* If it is, add it to the result list and decrement the count in the HashMap.
39-
* 3. Return the result list containing the intersection of the two arrays.
45+
* 1. Count the occurrences of each element in the first array using a map.
46+
* 2. Iterate over the second array and collect common elements.
4047
*
4148
* @param arr1 the first array of integers
4249
* @param arr2 the second array of integers
43-
* @return a list containing the intersection of the two arrays, or an empty list if either array is null or empty
50+
* @return a list containing the intersection of the two arrays (with duplicates),
51+
* or an empty list if either array is null or empty
4452
*/
4553
public static List<Integer> intersection(int[] arr1, int[] arr2) {
4654
if (arr1 == null || arr2 == null || arr1.length == 0 || arr2.length == 0) {
4755
return Collections.emptyList();
4856
}
4957

50-
Map<Integer, Integer> cnt = new HashMap<>(16);
51-
for (int v : arr1) {
52-
cnt.put(v, cnt.getOrDefault(v, 0) + 1);
58+
Map<Integer, Integer> countMap = new HashMap<>();
59+
for (int num : arr1) {
60+
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
5361
}
5462

55-
List<Integer> res = new ArrayList<>();
56-
for (int v : arr2) {
57-
if (cnt.containsKey(v) && cnt.get(v) > 0) {
58-
res.add(v);
59-
cnt.put(v, cnt.get(v) - 1);
63+
List<Integer> result = new ArrayList<>();
64+
for (int num : arr2) {
65+
if (countMap.getOrDefault(num, 0) > 0) {
66+
result.add(num);
67+
countMap.computeIfPresent(num, (k, v) -> v - 1);
6068
}
6169
}
62-
return res;
63-
}
6470

65-
private Intersection() {
71+
return result;
6672
}
6773
}

src/main/java/com/thealgorithms/datastructures/hashmap/hashing/MajorityElement.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package com.thealgorithms.datastructures.hashmap.hashing;
22

33
import java.util.ArrayList;
4+
import java.util.Collections;
45
import java.util.HashMap;
56
import java.util.List;
7+
import java.util.Map;
68

79
/**
810
* This class provides a method to find the majority element(s) in an array of integers.
@@ -18,13 +20,18 @@ private MajorityElement() {
1820
* Returns a list of majority element(s) from the given array of integers.
1921
*
2022
* @param nums an array of integers
21-
* @return a list containing the majority element(s); returns an empty list if none exist
23+
* @return a list containing the majority element(s); returns an empty list if none exist or input is null/empty
2224
*/
2325
public static List<Integer> majority(int[] nums) {
24-
HashMap<Integer, Integer> numToCount = new HashMap<>();
26+
if (nums == null || nums.length == 0) {
27+
return Collections.emptyList();
28+
}
29+
30+
Map<Integer, Integer> numToCount = new HashMap<>();
2531
for (final var num : nums) {
2632
numToCount.merge(num, 1, Integer::sum);
2733
}
34+
2835
List<Integer> majorityElements = new ArrayList<>();
2936
for (final var entry : numToCount.entrySet()) {
3037
if (entry.getValue() >= nums.length / 2) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy