From b250072f49752ae6ab05d580cd5be3e708fd82d3 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 07:48:54 +0100 Subject: [PATCH 01/12] add 2062 --- .../slidingWindow/SlidingWindowLeetcode.kt | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt index cc970657..6a373d43 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -1,5 +1,6 @@ package com.github.contest.slidingWindow + /** * 76. Minimum Window Substring */ @@ -237,3 +238,55 @@ private fun atMostK(nums: IntArray, k: Int): Int { return count } + +/** + * 2062. Count Vowel Substrings of a String + */ + +fun countVowelSubstrings(word: String): Int { + if (word.length < 5) return 0 + + var count = 0 + val k = 5 + val vowels = "aeiou" + + for (window in k..word.length) { + var left = 0 + val freq = mutableMapOf() + + for (right in 0 until word.length) { + freq[word[right]] = freq.getOrDefault(word[right], 0) + 1 + + if (right - left == window - 1) { + var isValid = true + + for ((key, _) in freq) { + if (!isVowel(key)) { + isValid = false + break + } + } + + for (vowel in vowels) { + if (!freq.contains(vowel)) { + isValid = false + break + } + } + + if (isValid) count++ + + freq[word[left]] = freq.getOrDefault(word[left], 0) - 1 + if (freq[word[left]] == 0) freq.remove(word[left]) + left++ + } + } + } + + return count +} + +private fun isVowel(char: Char) = when { + char in "aeiou" -> true + else -> false +} From 28ae95ad27e7bb68c042363fa2b8dc7849c488e4 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 07:49:34 +0100 Subject: [PATCH 02/12] save execute --- contest/src/main/java/com/github/contest/Execute.kt | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index e5e65b3b..cab31315 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -2,8 +2,6 @@ package com.github.contest import com.github.contest.hashTable.countGoodAlternativeSolution -import com.github.contest.hashTable.numEquivDominoPairsProdVariant -import com.github.contest.hashTable.testing import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -16,11 +14,7 @@ import java.util.TreeMap fun main() { - numEquivDominoPairsProdVariant( - arrayOf( - intArrayOf(1, 2), intArrayOf(2, 1), intArrayOf(3, 4), intArrayOf(5, 6) - ) - ).also { println(it) } + } fun countGoodData() { From 53f64502e08d4e45b93655387496d3f6bdcbf43c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 08:04:38 +0100 Subject: [PATCH 03/12] add 2062 hash map variant --- .../contest/hashTable/HashTableLeetcode.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt index d587d756..98e76ed3 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -508,4 +508,24 @@ fun numEquivDominoPairs(dominoes: Array): Int { return count } +/** + * 2062. Count Vowel Substrings of a String + */ + +fun countVowelSubstrings(word: String): Int { + var count = 0 + val vowels = setOf('a', 'e', 'i', 'o', 'u') + + for (i in word.indices) { + val seen = mutableSetOf() + for (j in i until word.length) { + val char = word[j] + if (char !in vowels) break + seen.add(char) + if (seen.size == 5) count++ + } + } + + return count +} From 5124568ac596d91710167bb1ca53920f94719651 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 08:19:01 +0100 Subject: [PATCH 04/12] add 2062 prod variant --- .../github/contest/hashTable/HashTableProdVariant.kt | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt index 15fe5742..6aa6b5c5 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -121,5 +121,17 @@ fun numEquivDominoPairsProdVariant(dominoes: Array): Int = dominoes .values .sumOf { count -> count * (count - 1) / 2 } +/** + * 2062. Count Vowel Substrings of a String + * Prod Variant + */ + +fun countVowelSubstringProdVariant(word: String): Int = word.indices.sumOf { i -> + val seen = mutableSetOf() + word.substring(i).takeWhile { it in "aeiou" }.count { + seen.add(it) + seen.size == 5 + } +} From ee51f9a79fc4f2f270b8f55d2dee0f9b5a1b5768 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 10:03:24 +0100 Subject: [PATCH 05/12] add yet prod variants for 2062 --- .../main/java/com/github/contest/Execute.kt | 4 +- .../contest/hashTable/HashTableProdVariant.kt | 49 +++++++++++++------ 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index cab31315..8b2a34dd 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,7 +1,7 @@ package com.github.contest -import com.github.contest.hashTable.countGoodAlternativeSolution +import com.github.contest.hashTable.countVowelSubstringProdVariantIV import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -18,7 +18,7 @@ fun main() { } fun countGoodData() { - countGoodAlternativeSolution(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } + countVowelSubstringProdVariantIV("aeiouu").also { println(it) } } fun fullJustifyData() { diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt index 6aa6b5c5..a80d0961 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -7,15 +7,14 @@ package com.github.contest.hashTable */ -fun areAlmostEqualProdVariant(s1: String, s2: String): Boolean = - when { - s1 == s2 -> true - s1.length != s2.length -> false - else -> s1.zip(s2).withIndex().filter { it.value.first != it.value.second }.map { it.index } - .let { diff -> - diff.size == 2 && s1[diff[0]] == s2[diff[1]] && s1[diff[1]] == s2[diff[0]] - } - } +fun areAlmostEqualProdVariant(s1: String, s2: String): Boolean = when { + s1 == s2 -> true + s1.length != s2.length -> false + else -> s1.zip(s2).withIndex().filter { it.value.first != it.value.second }.map { it.index } + .let { diff -> + diff.size == 2 && s1[diff[0]] == s2[diff[1]] && s1[diff[1]] == s2[diff[0]] + } +} /** * 2965. Find Missing and Repeated Values @@ -114,12 +113,12 @@ fun intToRomanProdVariant(num: Int): String { * 1128. Number of Equivalent Domino Pairs */ -fun numEquivDominoPairsProdVariant(dominoes: Array): Int = dominoes - .map { (a, b) -> if (a <= b) a to b else b to a } - .groupingBy { it } - .eachCount() - .values - .sumOf { count -> count * (count - 1) / 2 } +fun numEquivDominoPairsProdVariant(dominoes: Array): Int = + dominoes.map { (a, b) -> if (a <= b) a to b else b to a } + .groupingBy { it } + .eachCount() + .values + .sumOf { count -> count * (count - 1) / 2 } /** * 2062. Count Vowel Substrings of a String @@ -135,3 +134,23 @@ fun countVowelSubstringProdVariant(word: String): Int = word.indices.sumOf { i - } +/** + * 2062. Count Vowel Substrings of a String + * Prod Variant III + */ + +fun countVowelSubstringsProdVariantIII(word: String) = sequence { + word.forEachIndexed { i, _ -> + val seen = mutableSetOf() + word.asSequence().drop(i) + .takeWhile { it in "aeiou" } + .forEach { c -> + seen += c + if (seen.size == 5) yield(1) + } + } +}.sum() + + + + From 60fc2104b5ed8115d8c8fcb75745d05bc93f0dcd Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 10:07:13 +0100 Subject: [PATCH 06/12] add 3364 --- .../contest/slidingWindow/SlidingWindowLeetcode.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt index 6a373d43..64a08153 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -290,3 +290,14 @@ private fun isVowel(char: Char) = when { char in "aeiou" -> true else -> false } + +/** + * 3364. Minimum Positive Sum Subarray + */ + +fun minimumSumSubarray(nums: List, l: Int, r: Int): Int = buildList { + (l..r).forEach { window -> + nums.windowed(window).map { it.sum() }.filter { it > 0 }.forEach { add(it) } + } +}.min() + From 3751203f99593c35c5e049878ed8e3bd8fd11429 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 10:09:03 +0100 Subject: [PATCH 07/12] add two variants with todo --- .../contest/slidingWindow/SlidingWindowLeetcode.kt | 10 +++++----- .../contest/slidingWindow/SlidingWindowProdVariant.kt | 10 ++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt index 64a08153..eeb68294 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -295,9 +295,9 @@ private fun isVowel(char: Char) = when { * 3364. Minimum Positive Sum Subarray */ -fun minimumSumSubarray(nums: List, l: Int, r: Int): Int = buildList { - (l..r).forEach { window -> - nums.windowed(window).map { it.sum() }.filter { it > 0 }.forEach { add(it) } - } -}.min() +fun minimumSumSubarray(nums: List, l: Int, r: Int): Int { + val minSums = mutableListOf() + return TODO("Make this method") +} + diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt index 5202631f..747c9d7d 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -86,3 +86,13 @@ fun countSubArraysProdVariant(nums: IntArray): Int = (it.first() + it.last()).toDouble() == it[1].toDouble() / 2.0 } +/** + * 3364. Minimum Positive Sum Subarray + * Prod Variant + */ + +fun minimumSumSubarrayProdVariant(nums: List, l: Int, r: Int): Int = buildList { + (l..r).forEach { window -> + nums.windowed(window).map { it.sum() }.filter { it > 0 }.forEach { add(it) } + } +}.min() From a8a0f3116eba810bbccb2d55655ab78e4dde3e70 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 11 May 2025 11:52:14 +0100 Subject: [PATCH 08/12] small change 3364 --- .../github/contest/slidingWindow/SlidingWindowProdVariant.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt index 747c9d7d..b4685c04 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -95,4 +95,4 @@ fun minimumSumSubarrayProdVariant(nums: List, l: Int, r: Int): Int = buildL (l..r).forEach { window -> nums.windowed(window).map { it.sum() }.filter { it > 0 }.forEach { add(it) } } -}.min() +}.minOrNull() ?: -1 From a93b9cdf4bf1b1a215fd984e54a516a3d0dc2093 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 11 May 2025 13:46:52 +0100 Subject: [PATCH 09/12] add 2918 --- .../com/github/contest/array/ArrayLeetcode.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt index 7a62b585..6ec7c393 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -295,3 +295,33 @@ fun merge(intervals: Array): Array { return res.toTypedArray() } +/** + * 2918. Minimum Equal Sum of Two Arrays After Replacing Zeros + */ + +fun minSum(nums1: IntArray, nums2: IntArray): Long { + val zerosOne = nums1.countLong { it == 0 } + val zerosTwo = nums2.countLong { it == 0 } + val sumOne = nums1.sumLong() + zerosOne + val sumTwo = nums2.sumLong() + zerosTwo + + return when { + sumOne == sumTwo -> sumOne + sumOne < sumTwo -> if (zerosOne > 0) sumTwo else -1L + else -> if (zerosTwo > 0) sumOne else -1L + } +} + +private fun IntArray.countLong(predicate: (Int) -> Boolean): Long { + var count = 0L + for (element in this) { + if (predicate(element)) count++ + } + return count +} + +private fun IntArray.sumLong(): Long { + var sum = 0L + for (element in this) sum += element + return sum +} From b68de1481fc0d22c9b7628d0e8b4e8e3d7a6890b Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 11 May 2025 13:47:27 +0100 Subject: [PATCH 10/12] save exe --- contest/src/main/java/com/github/contest/Execute.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 8b2a34dd..3990e68e 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,7 +1,7 @@ package com.github.contest -import com.github.contest.hashTable.countVowelSubstringProdVariantIV +import com.github.contest.array.minSum import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -14,11 +14,15 @@ import java.util.TreeMap fun main() { - + minSum( + intArrayOf(0, 0, 10, 10, 12, 0, 13, 6, 0, 2, 10), + intArrayOf(24, 5, 12, 22) + ).also { println(it) } } fun countGoodData() { - countVowelSubstringProdVariantIV("aeiouu").also { println(it) } + + } fun fullJustifyData() { From 0e2ec6e8fa9624eca176ea9edc000788a5950ebb Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 11 May 2025 14:06:43 +0100 Subject: [PATCH 11/12] add 1550 --- .../com/github/contest/array/ArrayLeetcode.kt | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt index 6ec7c393..3ee31a42 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -325,3 +325,25 @@ private fun IntArray.sumLong(): Long { for (element in this) sum += element return sum } + +/** + * 1550. Three Consecutive Odds + */ + +fun threeConsecutiveOdds(arr: IntArray): Boolean { + var consecutive = 3 + + for (num in arr) { + if (isOdd(num)) consecutive-- + else consecutive = 3 + + if (consecutive == 0) return true + } + + return false +} + +private fun isOdd(number: Int) = when { + number % 2 != 0 -> true + else -> false +} From 6c9171e9b3266d34e05956c43eb0c40e88245294 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 11 May 2025 14:38:56 +0100 Subject: [PATCH 12/12] add prod variants for 1550 and middle element ext fun --- .../com/github/contest/array/ArrayLeetcode.kt | 2 +- .../github/contest/array/ArrayProdVariant.kt | 30 ++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt index 3ee31a42..24c100b4 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -343,7 +343,7 @@ fun threeConsecutiveOdds(arr: IntArray): Boolean { return false } -private fun isOdd(number: Int) = when { +fun isOdd(number: Int) = when { number % 2 != 0 -> true else -> false } diff --git a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt index 7ee7363e..bba539c4 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -120,4 +120,32 @@ fun mergeProdVariantII(intervals: Array): Array = it[1] = maxOf(it[1], interval[1]) } ?: merged.add(interval) merged - }.toTypedArray() \ No newline at end of file + }.toTypedArray() + +/** + * 1550. Three Consecutive Odds + * Prod Variants + */ + +fun threeConsecutiveOddsProdVariantI(arr: IntArray): Boolean = + arr.toList() + .windowed(3) + .filter { + val one = it[0] + val two = it[1] + val three = it[2] + isOdd(one) && isOdd(two) && isOdd(three) + }.isNotEmpty() + +fun threeConsecutiveOddsProdVariantII(arr: IntArray): Boolean = + arr.toList() + .windowed(3) + .any { isOdd(it.first()) && isOdd(it.middle()) && isOdd(it.last()) } + +private fun List.middle(): Int = this[this.size / 2] + +fun threeConsecutiveOddsProdVariantIII(arr: IntArray): Boolean = + arr.toList() + .windowed(3) + .any { window -> window.all { it % 2 != 0 } } +