Skip to content

Commit 51d921c

Browse files
solves degree of array
1 parent 654791c commit 51d921c

File tree

3 files changed

+74
-4
lines changed

3 files changed

+74
-4
lines changed

README.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
# LeetCode Algorithms
22

3-
![problems-solved](https://img.shields.io/badge/Problems%20Solved-168/2081-1f425f.svg)
4-
![problems-solved-java](https://img.shields.io/badge/Java-168/2081-1abc9c.svg)
5-
![problems-solved-python](https://img.shields.io/badge/Python-168/2081-1abc9c.svg)
3+
![problems-solved](https://img.shields.io/badge/Problems%20Solved-169/2081-1f425f.svg)
4+
![problems-solved-java](https://img.shields.io/badge/Java-169/2081-1abc9c.svg)
5+
![problems-solved-python](https://img.shields.io/badge/Python-169/2081-1abc9c.svg)
66
[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
77
[![cp](https://img.shields.io/badge/also%20see-Competitve%20Programming-1f72ff.svg)](https://github.com/anishLearnsToCode/competitive-programming)
88

@@ -189,7 +189,7 @@
189189
| 690 | [Employee Importance](https://leetcode.com/problems/employee-importance) | |
190190
| 693 | [Binary Number with Alternating Bits](https://leetcode.com/problems/binary-number-with-alternating-bits) | [![Java](assets/java.png)](src/BinaryNumberWithAlternatingBits.java) [![Python](assets/python.png)](python/binary_number_with_alternating_bits.py) |
191191
| 696 | [Count Binary Substrings](https://leetcode.com/problems/count-binary-substrings) | [![Java](assets/java.png)](src/CountBinarySubstrings.java) [![Python](assets/python.png)](python/count_binary_substrings.py) |
192-
| 697 | [Degree of an Array](https://leetcode.com/problems/degree-of-an-array) | |
192+
| 697 | [Degree of an Array](https://leetcode.com/problems/degree-of-an-array) | [![Java](assets/java.png)](src/DegreeOfAnArray.java) [![Python](assets/python.png)](python/degree_of_an_array.py) |
193193
| 700 | [Search in a Binary Search Tree](https://leetcode.com/problems/search-in-a-binary-search-tree) | |
194194
| 703 | [Kth Largest Element in a Stream](https://leetcode.com/problems/kth-largest-element-in-a-stream) | |
195195
| 704 | [Binary Search](https://leetcode.com/problems/binary-search) | |

python/degree_of_an_array.py

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
from collections import Counter
2+
from typing import List, Dict
3+
4+
5+
class Solution:
6+
def getLeftPosition(self, array: List[int]) -> Dict[int, int]:
7+
positions = {}
8+
for index, element in enumerate(array):
9+
if element not in positions:
10+
positions[element] = index
11+
return positions
12+
13+
def getRightPosition(self, array: List[int]) -> Dict[int, int]:
14+
return {number : index for index, number in enumerate(array)}
15+
16+
def findShortestSubArray(self, numbers: List[int]) -> int:
17+
frequencies = Counter(numbers)
18+
leftMost = self.getLeftPosition(numbers)
19+
rightMost = self.getRightPosition(numbers)
20+
maxFrequency = max(frequencies.values())
21+
result = float('inf')
22+
for number, frequency in frequencies.items():
23+
if frequency == maxFrequency:
24+
result = min(result, rightMost[number] - leftMost[number] + 1)
25+
return result

src/DegreeOfAnArray.java

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
public class DegreeOfAnArray {
5+
public int findShortestSubArray(int[] numbers) {
6+
Map<Integer, Integer> frequencies = getFrequencies(numbers);
7+
Map<Integer, Integer> leftMostPosition = getLeftMostPositionOf(numbers);
8+
Map<Integer, Integer> rightMostPosition = getRightMostPositionOf(numbers);
9+
int maxFrequency = frequencies.values().stream().max(Integer::compareTo).get();
10+
int result = Integer.MAX_VALUE, element = 0;
11+
for (Map.Entry<Integer, Integer> entry : frequencies.entrySet()) {
12+
if (entry.getValue() == maxFrequency) {
13+
element = entry.getKey();
14+
result = Math.min(result, rightMostPosition.get(element) - leftMostPosition.get(element) + 1);
15+
}
16+
}
17+
return result;
18+
}
19+
20+
private Map<Integer, Integer> getFrequencies(int[] array) {
21+
Map<Integer, Integer> result = new HashMap<>();
22+
for (int element : array) {
23+
result.put(element, result.getOrDefault(element, 0) + 1);
24+
}
25+
return result;
26+
}
27+
28+
private Map<Integer, Integer> getLeftMostPositionOf(int[] array) {
29+
Map<Integer, Integer> result = new HashMap<>();
30+
for (int index = 0 ; index < array.length ; index++) {
31+
if (!result.containsKey(array[index])) {
32+
result.put(array[index], index);
33+
}
34+
}
35+
return result;
36+
}
37+
38+
private Map<Integer, Integer> getRightMostPositionOf(int[] array) {
39+
Map<Integer, Integer> result = new HashMap<>();
40+
for (int index = 0 ; index < array.length ; index++) {
41+
result.put(array[index], index);
42+
}
43+
return result;
44+
}
45+
}

0 commit comments

Comments
 (0)