diff --git a/.github/workflows/gradle.yml b/.github/workflows/gradle.yml index 6f55236..a4a0268 100644 --- a/.github/workflows/gradle.yml +++ b/.github/workflows/gradle.yml @@ -23,10 +23,10 @@ jobs: steps: - uses: actions/checkout@v4 - - name: Set up JDK 11 for x64 + - name: Set up JDK 17 for x64 uses: actions/setup-java@v3 with: - java-version: '11' + java-version: '17' distribution: 'temurin' architecture: x64 - name: Validate Gradle wrapper diff --git a/build.gradle.kts b/build.gradle.kts index e8bf75f..12157ac 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,4 +17,10 @@ dependencies { tasks.test { useJUnitPlatform() +} + +java { + toolchain { + languageVersion.set(JavaLanguageVersion.of(17)) + } } \ No newline at end of file diff --git a/src/main/java/problemset/a0692/TopKFrequentWords.java b/src/main/java/problemset/a0692/TopKFrequentWords.java index 09b4f97..5654a70 100644 --- a/src/main/java/problemset/a0692/TopKFrequentWords.java +++ b/src/main/java/problemset/a0692/TopKFrequentWords.java @@ -8,8 +8,8 @@ public List topKFrequent(String[] words, int k) { for (String w : words) { wordCount.put(w, wordCount.getOrDefault(w, 0) + 1); } - List res = new ArrayList(wordCount.keySet()); - Collections.sort(res, (w1, w2) -> wordCount.get(w1).equals(wordCount.get(w2)) ? + List res = new ArrayList<>(List.copyOf(wordCount.keySet())); + res.sort((w1, w2) -> wordCount.get(w1).equals(wordCount.get(w2)) ? w1.compareTo(w2) : wordCount.get(w2) - wordCount.get(w1)); return res.subList(0, k); diff --git a/src/main/java/problemset/a3005/CountElementsWithMaximumFrequency.java b/src/main/java/problemset/a3005/CountElementsWithMaximumFrequency.java new file mode 100644 index 0000000..88fa888 --- /dev/null +++ b/src/main/java/problemset/a3005/CountElementsWithMaximumFrequency.java @@ -0,0 +1,26 @@ +package problemset.a3005; + +import java.util.*; + +public class CountElementsWithMaximumFrequency { + + public int maxFrequencyElements(int[] nums) { + int maxFreq = 0, maxCount = 0; + Map valueMap = new HashMap<>(); + + for (int i : nums) { + if (valueMap.containsKey(i)) + valueMap.put(i, valueMap.get(i) + 1); + else + valueMap.putIfAbsent(i, 1); + + int curr = valueMap.get(i); + if (curr > maxFreq) { + maxFreq = curr; + maxCount = 1; + } else if (curr == maxFreq) + maxCount++; + } + return maxFreq * maxCount; + } +} diff --git a/src/test/java/problemset/a3005/CountElementsWithMaximumFrequencyTest.java b/src/test/java/problemset/a3005/CountElementsWithMaximumFrequencyTest.java new file mode 100644 index 0000000..684287e --- /dev/null +++ b/src/test/java/problemset/a3005/CountElementsWithMaximumFrequencyTest.java @@ -0,0 +1,34 @@ +package problemset.a3005; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CountElementsWithMaximumFrequencyTest { + + private CountElementsWithMaximumFrequency max; + + private int[] numTestCaseOne; + private int[] numTestCaseTwo; + + @BeforeEach + void setUp() { + max = new CountElementsWithMaximumFrequency(); + + numTestCaseOne = new int[] {1, 2, 2, 3, 1, 4}; + numTestCaseTwo = new int[] {1, 2, 3, 4, 5}; + } + + @Test + void testcaseOne_maxFrequencyElements() { + int result = max.maxFrequencyElements(numTestCaseOne); + assertEquals(4, result); + } + + @Test + void testcaseTwo_maxFrequencyElements() { + int result = max.maxFrequencyElements(numTestCaseTwo); + assertEquals(5, result); + } +} \ No newline at end of file