Skip to content

Commit 26bd397

Browse files
solves #2748: Number of Beautiful Pairs in java
1 parent c4401ee commit 26bd397

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

README.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@
834834
| 2733 | [Neither Minimum nor Maximum](https://leetcode.com/problems/neither-minimum-nor-maximum) | [![Java](assets/java.png)](src/NeitherMinimumNorMaximum.java) | |
835835
| 2739 | [Total Distance Traveled](https://leetcode.com/problems/total-distance-traveled) | [![Java](assets/java.png)](src/TotalDistanceTraveled.java) | |
836836
| 2744 | [Find Maximum Number of String Pairs](https://leetcode.com/problems/find-maximum-number-of-string-pairs) | [![Java](assets/java.png)](src/FindMaximumNumberOfStringPairs.java) | |
837-
| 2748 | [Number of Beautiful Pairs](https://leetcode.com/problems/number-of-beautiful-pairs) | | |
837+
| 2748 | [Number of Beautiful Pairs](https://leetcode.com/problems/number-of-beautiful-pairs) | [![Java](assets/java.png)](src/)NumberOfBeautifulPairs.java) | |
838838
| 2760 | [Longest Even Odd Subarray With Threshold](https://leetcode.com/problems/longest-even-odd-subarray-with-threshold) | | |
839839
| 2765 | [Longest Alternating Subarray](https://leetcode.com/problems/longest-alternating-subarray) | | |
840840
| 2769 | [Find the Maximum Achievable Number](https://leetcode.com/problems/find-the-maximum-achievable-number) | | |

src/NumberOfBeautifulPairs.java

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
// https://leetcode.com/problems/number-of-beautiful-pairs/description
2+
// N: length of number array
3+
// m: size of average number
4+
// T: O(N * log(m))
5+
// S: O(N)
6+
7+
import java.util.HashMap;
8+
import java.util.Map;
9+
10+
public class NumberOfBeautifulPairs {
11+
public int countBeautifulPairs(int[] array) {
12+
final Map<Integer, Integer> firstDigitFrequencies = new HashMap<>();
13+
int pairs = 0;
14+
for (int element : array) {
15+
final int firstDigit = getFirstDigit(element);
16+
final int lastDigit = getLastDigit(element);
17+
for (Map.Entry<Integer, Integer> entry : firstDigitFrequencies.entrySet()) {
18+
if (gcd(lastDigit, entry.getKey()) == 1) {
19+
pairs += entry.getValue();
20+
}
21+
}
22+
firstDigitFrequencies.put(firstDigit, firstDigitFrequencies.getOrDefault(firstDigit, 0) + 1);
23+
}
24+
return pairs;
25+
}
26+
27+
private int getFirstDigit(int number) {
28+
return (number + "").charAt(0) - '0';
29+
}
30+
31+
private int getLastDigit(int number) {
32+
return number % 10;
33+
}
34+
35+
// T: O(log(max(a, b)))
36+
// S: O(log(max(a, b)))
37+
private int gcd(int a, int b) {
38+
if (b == 0) return a;
39+
return gcd(b, a % b);
40+
}
41+
}

0 commit comments

Comments
 (0)