From b9137d7e40f85e15f356c53e34023b613f3a031c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 16 Apr 2025 12:26:54 +0100 Subject: [PATCH 01/96] add 2537 --- .../main/java/com/github/contest/Execute.kt | 7 +++- .../contest/hashTable/HashTableLeetcode.kt | 34 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index ac3e9cd8..b194a967 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,6 +1,7 @@ package com.github.contest +import com.github.contest.hashTable.countGood import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -13,6 +14,11 @@ import java.util.TreeMap fun main() { + countGood(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } + +} + +fun fullJustifyData() { fullJustify( arrayOf( "Science", @@ -39,7 +45,6 @@ fun main() { it ) } - } fun subStrHashData() { 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 8647bbc5..dcea64a0 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -331,4 +331,38 @@ fun isAnagram(s: String, t: String): Boolean { } return true +} + +/** + * 2537. Count the Number of Good Subarrays + * TLE Approach + */ + +fun countGood(nums: IntArray, k: Int): Long { + if (nums.hasSingle()) return 0L + + var count = 0L + var left = 0 + + while (left < nums.size) { + var right = left + 1 + while (right < nums.size) { + var localCounter = 0 + for (i in left..right) { + for (j in i + 1..right) { + if (nums[i] == nums[j]) localCounter++ + } + } + if (localCounter >= k) count++ + right++ + } + left++ + } + + return count +} + +private fun IntArray.hasSingle() = when { + this.size == 1 -> true + else -> false } \ No newline at end of file From 705b3121ac63de9e03e01e45bcb8c857fad28023 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 16 Apr 2025 13:03:42 +0100 Subject: [PATCH 02/96] add 2537 hashmap approach --- .../main/java/com/github/contest/Execute.kt | 4 +- .../hashTable/HashTableAlternativeSolution.kt | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index b194a967..999b6dfb 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.countGood +import com.github.contest.hashTable.countGoodAlternativeSolution import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -14,7 +14,7 @@ import java.util.TreeMap fun main() { - countGood(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } + countGoodAlternativeSolution(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } } diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt index e720e671..66f4196c 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt @@ -45,4 +45,43 @@ fun countBadPairsAltSolution(nums: IntArray): Long { class Counter { var count: Int = 0 +} + +/** + * 2537. Count the Number of Good Subarrays + * Alternative Solution Optimal + * Hash Map Approach + */ + +fun countGoodAlternativeSolution(nums: IntArray, k: Int): Long { + var left = 0 + var count = 0L + var totalPairs = 0L + val freq = mutableMapOf() + + for (right in nums.indices) { + // Update the frequency of the current element + val num = nums[right] + val currentFreq = freq.getOrDefault(num, 0) + // Each existing occurrence creates new pairs + totalPairs += currentFreq + freq[num] = currentFreq + 1 + + // While the window has enough pairs, try to shrink from the left + while (totalPairs >= k) { + val leftNum = nums[left] + // Before removing, reduce the pairs count + totalPairs -= freq[leftNum]!! - 1 + freq[leftNum] = freq[leftNum]!! - 1 + if (freq[leftNum] == 0) { + freq.remove(leftNum) + } + left++ + } + + // All subarrays ending at right with start <= left-1 are good + count += left + } + + return count } \ No newline at end of file From 62106d70fb8bb866604c62f8aad8cb28fed5511f Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 16 Apr 2025 13:06:58 +0100 Subject: [PATCH 03/96] del comments --- .../contest/hashTable/HashTableAlternativeSolution.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt index 66f4196c..ea6995ae 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt @@ -60,17 +60,17 @@ fun countGoodAlternativeSolution(nums: IntArray, k: Int): Long { val freq = mutableMapOf() for (right in nums.indices) { - // Update the frequency of the current element + val num = nums[right] val currentFreq = freq.getOrDefault(num, 0) - // Each existing occurrence creates new pairs + totalPairs += currentFreq freq[num] = currentFreq + 1 - // While the window has enough pairs, try to shrink from the left + while (totalPairs >= k) { val leftNum = nums[left] - // Before removing, reduce the pairs count + totalPairs -= freq[leftNum]!! - 1 freq[leftNum] = freq[leftNum]!! - 1 if (freq[leftNum] == 0) { @@ -79,7 +79,7 @@ fun countGoodAlternativeSolution(nums: IntArray, k: Int): Long { left++ } - // All subarrays ending at right with start <= left-1 are good + count += left } From d336421eff397794dcb9e501cbffb7e03b6d4415 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 17 Apr 2025 14:55:22 +0100 Subject: [PATCH 04/96] add 169 --- .../contest/hashTable/HashTableLeetcode.kt | 21 +++++++++++++++++++ 1 file changed, 21 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 dcea64a0..52db0d98 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -365,4 +365,25 @@ fun countGood(nums: IntArray, k: Int): Long { private fun IntArray.hasSingle() = when { this.size == 1 -> true else -> false +} + + +/** + * 169. Majority Element + */ + +fun majorityElement(nums: IntArray): Int { + var majority = 0 + var res = 0 + val target = nums.size / 2 + + nums.forEach { + if (majority == 0) res = it + majority += when { + it == res -> 1 + else -> -1 + } + } + + return res } \ No newline at end of file From 2fae4f85ba8b9cf4e46679a7acd811c8aae5471e Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 17 Apr 2025 15:25:45 +0100 Subject: [PATCH 05/96] add 2176 --- .../contest/hashTable/HashTableLeetcode.kt | 25 +++++++++++++++++++ 1 file changed, 25 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 52db0d98..431aa200 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -386,4 +386,29 @@ fun majorityElement(nums: IntArray): Int { } return res +} + +/** + * 2176. Count Equal and Divisible Pairs in an Array + */ + +fun countPairs(nums: IntArray, k: Int): Int { + if (nums.size < 2) return 0 + + val store = mutableMapOf>() + var count = 0 + + for (i in nums.indices) { + val num = nums[i] + if (store.contains(num)) { + val indexed = store.getOrDefault(num, mutableListOf()) + for (index in indexed) { + if ((index * i) % k == 0) count++ + } + indexed.add(i) + store[num] = indexed + } else store[num] = mutableListOf(i) + } + + return count } \ No newline at end of file From 441255bc29df2e0b8d259c4e2a6292f99140d0e3 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 18 Apr 2025 15:21:49 +0100 Subject: [PATCH 06/96] add 38 --- .../github/contest/strings/StringsLeetcode.kt | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt b/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt index e11796dc..8fe93934 100644 --- a/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt +++ b/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt @@ -338,6 +338,37 @@ private fun lastString(store: List, maxWidth: Int): String { private fun sumOfLength(store: List): Int = store.sumOf { it.length } + +/** + * 38. Count and Say + */ + +fun countAndSay(n: Int): String = when { + n == 1 -> "1" + else -> compress(countAndSay(n - 1)) +} + +private fun compress(input: String): String { + if (input.length == 1) return "11" + var res = "" + var pattern = input[0] + var count = 1 + + for (i in 1 until input.length) { + if (input[i] == pattern) { + count++ + } else { + res += "$count$pattern" + count = 1 + pattern = input[i] + } + } + + res += "$count$pattern" + + return res +} + /** * */ From 2b90bf18a9020afde2a596f8518453c0840c9f3b Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 20 Apr 2025 14:27:28 +0100 Subject: [PATCH 07/96] new problem in progress --- .../main/java/com/github/contest/Execute.kt | 8 ++++- .../binarySearch/BinarySearchLeetcode.kt | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 999b6dfb..36348384 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,6 +1,7 @@ package com.github.contest +import com.github.contest.binarySearch.twoSum import com.github.contest.hashTable.countGoodAlternativeSolution import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify @@ -14,10 +15,15 @@ import java.util.TreeMap fun main() { - countGoodAlternativeSolution(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } + twoSum(intArrayOf(-1, 0), -1).printArray() + } +fun countGoodData() { + countGoodAlternativeSolution(intArrayOf(3, 1, 4, 3, 2, 2, 4), 2).also { println(it) } +} + fun fullJustifyData() { fullJustify( arrayOf( diff --git a/contest/src/main/java/com/github/contest/binarySearch/BinarySearchLeetcode.kt b/contest/src/main/java/com/github/contest/binarySearch/BinarySearchLeetcode.kt index ccc2a7f3..bbde2f06 100644 --- a/contest/src/main/java/com/github/contest/binarySearch/BinarySearchLeetcode.kt +++ b/contest/src/main/java/com/github/contest/binarySearch/BinarySearchLeetcode.kt @@ -37,3 +37,33 @@ fun minCapability(nums: IntArray, k: Int): Int { return ans } + +/** + * + */ + +fun twoSum(numbers: IntArray, target: Int): IntArray { + var boundIndex = numbers.size - 1 + var nullIndex = 0 + for (i in numbers.indices) { + if (numbers[i] > target) { + boundIndex = i - 1 + } + if (numbers[i] == 0) nullIndex = i + } + + for (i in boundIndex downTo 0) { + var left = 0 + var right = i + val tar = target - numbers[i] + if (tar == 0) return intArrayOf(i + 1, nullIndex + 1) + while (left <= right) { + var mid = (left + right) / 2 + if (numbers[mid] == tar) return intArrayOf(mid + 1, i + 1) + if (numbers[mid] < tar) mid = left + 1 + else right = mid - 1 + } + } + + return intArrayOf() +} From 781180fb5db284452663760624990c68f8d3cf0d Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 23 Apr 2025 16:58:06 +0100 Subject: [PATCH 08/96] add 1399 --- .../com/github/contest/math/MathLeetcode.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt index 39ac2eac..e018a27f 100644 --- a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt +++ b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt @@ -132,6 +132,31 @@ fun countSymmetricIntegers(low: Int, high: Int): Int { return count } +/** + * 1399. Count Largest Group + */ + +fun countLargestGroup(n: Int): Int { + val freq = IntArray(40) + var maxCount = 0 + + for (i in 1..n) { + var sum = 0 + var x = i + while (x > 0) { + sum += x % 10 + x /= 10 + } + freq[sum]++ + maxCount = maxOf(maxCount, freq[sum]) + } + + var groupCount = 0 + for (count in freq) if (count == maxCount) groupCount++ + + return groupCount +} + /** * */ From 0ebf441a000334abf8bbc242dd7376ba961c7fa6 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 24 Apr 2025 18:53:42 +0100 Subject: [PATCH 09/96] add 2799 --- .../contest/hashTable/HashTableLeetcode.kt | 33 +++++++++++++++++++ 1 file changed, 33 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 431aa200..7abc32aa 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -411,4 +411,37 @@ fun countPairs(nums: IntArray, k: Int): Int { } return count +} + +/** + * 2799. Count Complete SubArrays in an Array + */ + +fun countCompleteSubArrays(nums: IntArray): Int { + if (nums.size == 1) return 1 + + var count = 0 + val distinct = distinctElementsOfArray(nums) + var lastIndex = nums.size - 1 + + for (i in 0 until nums.size) { + var j = i + val set = mutableSetOf() + + while (j < nums.size && set.size != distinct) { + set.add(nums[j]) + j++ + } + j-- + if (set.size == distinct) count += (lastIndex - j) + 1 + } + + return count + +} + +private fun distinctElementsOfArray(nums: IntArray): Int { + val set = mutableSetOf() + for (num in nums) set.add(num) + return set.size } \ No newline at end of file From 5195f0d6946a7e049851c840d5de4f59979ee471 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 10:17:38 +0100 Subject: [PATCH 10/96] add 2799 prod variant --- .../contest/hashTable/HashTableLeetcode.kt | 2 +- .../contest/hashTable/HashTableProdVariant.kt | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) 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 7abc32aa..c64e1281 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -424,7 +424,7 @@ fun countCompleteSubArrays(nums: IntArray): Int { val distinct = distinctElementsOfArray(nums) var lastIndex = nums.size - 1 - for (i in 0 until nums.size) { + for (i in nums.indices) { var j = i val set = mutableSetOf() 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 5245dcdb..827334f0 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -48,3 +48,30 @@ fun findMissingAndRepeatedValuesProdVariant(grid: Array): IntArray { } +/** + * 2799. Count Complete Subarrays in an Array + * Prod Variant + */ + +fun countCompleteSubArrayProdVariant(nums: IntArray): Int { + val unique = nums.distinct().size + var count = 0 + val freq = mutableMapOf() + var left = 0 + val n = nums.size + + nums.forEachIndexed { right, num -> + freq[num] = freq.getOrDefault(num, 0) + 1 + + while (freq.size == unique) { + count += n - right + val delete = nums[left] + freq[delete] = freq.getOrDefault(delete, 0) - 1 + if (freq[delete] == 0) freq.remove(delete) + left++ + } + } + + return count +} + From 2160d9350498260b9c028559f77a4abd925a1c08 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 11:30:38 +0100 Subject: [PATCH 11/96] add 58 easy problem --- .../github/contest/strings/StringsLeetcode.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt b/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt index 8fe93934..b4b6f093 100644 --- a/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt +++ b/contest/src/main/java/com/github/contest/strings/StringsLeetcode.kt @@ -369,6 +369,26 @@ private fun compress(input: String): String { return res } +/** + * 58. Length of Last Word + */ + + +fun lengthOfLastWord(s: String): Int { + var i = s.length - 1 + var size = 0 + + while (i >= 0 && s[i] == ' ') i-- + + while (i >= 0 && s[i] != ' ') { + size++ + i-- + } + + return size +} + + /** * */ From db8605ce6e2dfc171a70683a29b4ccf9e7b8378d Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 11:34:41 +0100 Subject: [PATCH 12/96] add 58 prod variant --- .../com/github/contest/strings/StringsProdVariant.kt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/strings/StringsProdVariant.kt b/contest/src/main/java/com/github/contest/strings/StringsProdVariant.kt index f94a8152..a92aa82a 100644 --- a/contest/src/main/java/com/github/contest/strings/StringsProdVariant.kt +++ b/contest/src/main/java/com/github/contest/strings/StringsProdVariant.kt @@ -58,4 +58,11 @@ fun smallestStringProdVariant(s: String): String { } String(modifiedChars) } -} \ No newline at end of file +} + +/** + * 58. Length of Last Word + * Prod Variant + */ + +fun lengthOfLastWordProdVariant(s: String): Int = s.trim().split(" ").lastOrNull()?.length ?: 0 \ No newline at end of file From d8facc18ca7479edf54ebcb361014d9bd671cefa Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 13:06:52 +0100 Subject: [PATCH 13/96] add 12 --- .../main/java/com/github/contest/Execute.kt | 4 +-- .../contest/hashTable/HashTableLeetcode.kt | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 36348384..623b7699 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,8 +1,8 @@ package com.github.contest -import com.github.contest.binarySearch.twoSum import com.github.contest.hashTable.countGoodAlternativeSolution +import com.github.contest.hashTable.intToRoman import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -15,7 +15,7 @@ import java.util.TreeMap fun main() { - twoSum(intArrayOf(-1, 0), -1).printArray() + intToRoman(3799).also { println(it) } } 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 c64e1281..2bb6dee3 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -444,4 +444,35 @@ private fun distinctElementsOfArray(nums: IntArray): Int { val set = mutableSetOf() for (num in nums) set.add(num) return set.size +} + +/** + * 12. Integer to Roman + */ + +fun intToRoman(num: Int): String { + val values = listOf( + 1000 to "M", + 900 to "CM", + 500 to "D", + 400 to "CD", + 100 to "C", + 90 to "XC", + 50 to "L", + 40 to "XL", + 10 to "X", + 9 to "IX", + 5 to "V", + 4 to "IV", + 1 to "I" + ) + var n = num + val result = StringBuilder() + for ((value, symbol) in values) { + while (n >= value) { + result.append(symbol) + n -= value + } + } + return result.toString() } \ No newline at end of file From 21d80faababffa93ce4fd279cfff7c761c9b2670 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 13:18:12 +0100 Subject: [PATCH 14/96] add 12 prod variant --- .../contest/hashTable/HashTableLeetcode.kt | 4 +- .../contest/hashTable/HashTableProdVariant.kt | 37 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) 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 2bb6dee3..42f536e3 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -475,4 +475,6 @@ fun intToRoman(num: Int): String { } } return result.toString() -} \ No newline at end of file +} + + 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 827334f0..2e29e599 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -75,3 +75,40 @@ fun countCompleteSubArrayProdVariant(nums: IntArray): Int { return count } +/** + * 12. Integer to Roman + * Prod Variant + */ + +fun intToRomanProdVariant(num: Int): String { + val values = mapOf( + 1000 to "M", + 900 to "CM", + 500 to "D", + 400 to "CD", + 100 to "C", + 90 to "XC", + 50 to "L", + 40 to "XL", + 10 to "X", + 9 to "IX", + 5 to "V", + 4 to "IV", + 1 to "I" + ) + return when { + values.contains(num) -> values.getOrDefault(num, "") + else -> { + var n = num + buildString { + values.forEach { (value, symbol) -> + while (n >= value) { + append(symbol) + n -= value + } + } + } + } + } +} + From 553a57d6a6b21100c740dfa21b46b1eb798ceb97 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 25 Apr 2025 13:19:06 +0100 Subject: [PATCH 15/96] change for estetic --- .../contest/hashTable/HashTableProdVariant.kt | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) 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 2e29e599..2810adde 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -96,16 +96,14 @@ fun intToRomanProdVariant(num: Int): String { 4 to "IV", 1 to "I" ) + var n = num return when { values.contains(num) -> values.getOrDefault(num, "") - else -> { - var n = num - buildString { - values.forEach { (value, symbol) -> - while (n >= value) { - append(symbol) - n -= value - } + else -> buildString { + values.forEach { (value, symbol) -> + while (n >= value) { + append(symbol) + n -= value } } } From dccae42675aa1628114785fb604738b9aa1eed88 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sat, 26 Apr 2025 16:28:06 +0100 Subject: [PATCH 16/96] add 380 --- .../github/contest/design/DesignLeetcode.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index 8542f2db..d2614a26 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -152,4 +152,32 @@ class TimeMap() { private fun emptyString() = "" +} + +/** + * 380. Insert Delete GetRandom O(1) + */ + +class RandomizedSet() { + + private val store = mutableMapOf() + + fun insert(`val`: Int): Boolean = when { + store.contains(`val`) -> false + else -> { + store[`val`] = store.getOrDefault(`val`, 0) + 1 + true + } + } + + fun remove(`val`: Int): Boolean = when { + !store.contains(`val`) -> false + else -> { + store.remove(`val`) + true + } + } + + fun getRandom(): Int = store.keys.random() + } \ No newline at end of file From fc8b82b8a4e5eaf13ed39e318c9674c453324891 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 27 Apr 2025 18:06:11 +0100 Subject: [PATCH 17/96] add 42 --- .../main/java/com/github/contest/Execute.kt | 4 +-- .../contest/twoPointer/TwoPointerLeetCode.kt | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 623b7699..183b6c92 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -2,10 +2,10 @@ package com.github.contest import com.github.contest.hashTable.countGoodAlternativeSolution -import com.github.contest.hashTable.intToRoman import com.github.contest.math.numberOfPowerfulInt import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash +import com.github.contest.twoPointer.trap import java.util.TreeMap @@ -15,7 +15,7 @@ import java.util.TreeMap fun main() { - intToRoman(3799).also { println(it) } + trap(intArrayOf(5, 1, 6, 2, 1, 2, 1, 3)).also { println(it) } } diff --git a/contest/src/main/java/com/github/contest/twoPointer/TwoPointerLeetCode.kt b/contest/src/main/java/com/github/contest/twoPointer/TwoPointerLeetCode.kt index 4ef2afc6..6ea85f7d 100644 --- a/contest/src/main/java/com/github/contest/twoPointer/TwoPointerLeetCode.kt +++ b/contest/src/main/java/com/github/contest/twoPointer/TwoPointerLeetCode.kt @@ -19,4 +19,33 @@ fun compareVersion(version1: String, version2: String): Int { } } return 0 +} + +/** + * 42. Trapping Rain Water + */ + + +fun trap(height: IntArray): Int { + if (height.isEmpty()) return 0 + + var left = 0 + var right = height.size - 1 + var leftMax = height[left] + var rightMax = height[right] + var water = 0 + + while (left < right) { + if (leftMax < rightMax) { + left++ + leftMax = maxOf(leftMax, height[left]) + water += leftMax - height[left] + } else { + right-- + rightMax = maxOf(rightMax, height[right]) + water += rightMax - height[right] + } + } + + return water } \ No newline at end of file From dac728743a085b0010f47a52bb0f5c6bc6eb6a53 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 27 Apr 2025 20:35:34 +0100 Subject: [PATCH 18/96] add 55 --- .../main/java/com/github/contest/dp/DpLeetcode.kt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt b/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt index 75368cf4..3edd750e 100644 --- a/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt +++ b/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt @@ -582,6 +582,21 @@ fun mostPointsDp(questions: Array): Long { return dp[0] } +/** + * 55. Jump Game + */ + +fun canJump(nums: IntArray): Boolean { + var prev = nums[0] + + for (i in 1 until nums.size) { + if (prev - 1 < 0) return false + prev = maxOf(prev - 1, nums[i]) + } + + return true +} + From 97d62280e6d2bf066ae6f42decb10bf634306d84 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 27 Apr 2025 20:37:17 +0100 Subject: [PATCH 19/96] add 55 alt sol --- .../contest/dp/DpAlternativeSolution.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 contest/src/main/java/com/github/contest/dp/DpAlternativeSolution.kt diff --git a/contest/src/main/java/com/github/contest/dp/DpAlternativeSolution.kt b/contest/src/main/java/com/github/contest/dp/DpAlternativeSolution.kt new file mode 100644 index 00000000..7466e03f --- /dev/null +++ b/contest/src/main/java/com/github/contest/dp/DpAlternativeSolution.kt @@ -0,0 +1,23 @@ +package com.github.contest.dp + +/** + * 55. Jump Game + * Alternative Solution + * Recursion Approach + */ + +fun canJumpAltSolution(nums: IntArray): Boolean = solve(nums, 0) + +private fun solve(nums: IntArray, index: Int): Boolean { + if (index >= nums.size - 1) return true + if (nums[index] == 0 && index < nums.size - 1) return false + + var step = nums[index] + + while (step != 0) { + if (solve(nums, index + step)) return true + step-- + } + + return false +} \ No newline at end of file From a8ea181cca40fb73d9cd5edc41519e30cdcec645 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 28 Apr 2025 15:36:05 +0100 Subject: [PATCH 20/96] add 45 --- .../java/com/github/contest/dp/DpLeetcode.kt | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt b/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt index 3edd750e..cb633014 100644 --- a/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt +++ b/contest/src/main/java/com/github/contest/dp/DpLeetcode.kt @@ -597,6 +597,31 @@ fun canJump(nums: IntArray): Boolean { return true } +/** + * 45. Jump Game II + */ + +fun jump(nums: IntArray): Int { + var jumps = 0 + var currentEnd = 0 + var farthest = 0 + + for (i in 0 until nums.size - 1) { + farthest = maxOf(farthest, i + nums[i]) + + if (i == currentEnd) { + jumps++ + currentEnd = farthest + + if (currentEnd >= nums.size - 1) { + break + } + } + } + + return jumps +} + From a73b0d44e528e3564ab477ef10046e0bc2185619 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 28 Apr 2025 15:57:26 +0100 Subject: [PATCH 21/96] add 189 --- .../com/github/contest/array/ArrayLeetcode.kt | 27 +++++++++++++++++++ 1 file changed, 27 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 ff335c50..6e7c35e9 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -178,7 +178,34 @@ fun maximumTripletValue(nums: IntArray): Long { return res } +/** + * 189. Rotate Array + */ + +fun rotate(nums: IntArray, k: Int): Unit { + if (k % nums.size != 0) { + val cache = mutableListOf() + val bound = when { + k > nums.size -> { + val temp = k % nums.size + nums.size - temp + } + + else -> nums.size - k + } + for (i in bound until nums.size) { + cache.add(nums[i]) + } + + for (i in 0 until bound) { + cache.add(nums[i]) + } + for (i in 0 until cache.size) { + nums[i] = cache[i] + } + } +} From 0491963680223f012da032587593f131170912a9 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 28 Apr 2025 15:57:44 +0100 Subject: [PATCH 22/96] small change --- contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 6e7c35e9..aaaf4573 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -182,7 +182,7 @@ fun maximumTripletValue(nums: IntArray): Long { * 189. Rotate Array */ -fun rotate(nums: IntArray, k: Int): Unit { +fun rotate(nums: IntArray, k: Int) { if (k % nums.size != 0) { val cache = mutableListOf() val bound = when { From b505a521c317747bc4e63183eec7b520f3927c23 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 28 Apr 2025 19:05:52 +0100 Subject: [PATCH 23/96] add 3392 --- .../slidingWindow/SlidingWindowLeetcode.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) 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 915681b5..f912ba9a 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -53,4 +53,25 @@ private fun checkUniqueAnswer(store: MutableMap, cache: MutableMap Date: Wed, 30 Apr 2025 11:30:42 +0100 Subject: [PATCH 24/96] add 30 --- .../slidingWindow/SlidingWindowLeetcode.kt | 60 ++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) 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 f912ba9a..9a6deacb 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -64,7 +64,7 @@ fun countSubArrays(nums: IntArray): Int { val k = 3 var left = 0 - for (right in 0 until nums.size) { + for (right in nums.indices) { if (right - left == k - 1) { val sum = (nums[left] + nums[right]).toDouble() val middle = nums[left + 1].toDouble() / 2.0 @@ -75,3 +75,61 @@ fun countSubArrays(nums: IntArray): Int { return count } + +/** + * 30. Substring with Concatenation of All Words + */ + +fun findSubstring(s: String, words: Array): List { + val res = mutableListOf() + val totalLen = words[0].length * words.size + val wordLen = words[0].length + val store = mutableMapOf() + + if (totalLen > s.length) return res + + for (word in words) store[word] = store.getOrDefault(word, 0) + 1 + + var left = 0 + + for (right in s.indices) { + if (right - left == totalLen - 1) { + val str = s.substring(left, right + 1) + if (isValidWord(str, store, wordLen)) res.add(left) + left++ + } + } + + return res +} + +private fun isValidWord(s: String, map: Map, window: Int): Boolean { + val seen = mutableMapOf() + var left = 0 + + for (right in s.indices) { + if (right - left == window - 1) { + val str = s.substring(left, right + 1) + seen[str] = seen.getOrDefault(str, 0) + 1 + left = right + 1 + } + } + + return when { + equalsMap(seen, map) -> true + else -> false + } +} + +private fun equalsMap(comparable: Map, base: Map): Boolean { + + for ((str, count) in comparable) { + if (!base.contains(str)) return false + else { + val amount = base[str] + if (amount != count) return false + } + } + + return true +} From 0289d5f4594e03e17082fefe01ecbc7952bd6176 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 30 Apr 2025 12:47:21 +0100 Subject: [PATCH 25/96] add prod variants for 30 --- .../slidingWindow/SlidingWindowProdVariant.kt | 76 ++++++++++++++++++- 1 file changed, 74 insertions(+), 2 deletions(-) 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 0cac09ab..b7d4c4f5 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -1,5 +1,77 @@ package com.github.contest.slidingWindow /** - * - */ \ No newline at end of file + * 30. Substring with Concatenation of All Words + * Prod Variant + */ + +fun findSubstringProdVariant(s: String, words: Array): List { + val res = mutableListOf() + val totalLen = words[0].length * words.size + val wordLen = words[0].length + val store = mutableMapOf() + + if (totalLen > s.length) return res + + for (word in words) store[word] = store.getOrDefault(word, 0) + 1 + + var left = 0 + + for (right in s.indices) { + if (right - left == totalLen - 1) { + val str = s.substring(left, right + 1) + if (isValidWord(str, store, wordLen)) res.add(left) + left++ + } + } + + return res +} + +private fun isValidWord(s: String, map: Map, window: Int): Boolean { + val seen = mutableMapOf() + + s.windowed(window, window) { + seen[it.toString()] = seen.getOrDefault(it, 0) + 1 + } + + return when { + equalsMap(seen, map) -> true + else -> false + } +} + +private fun equalsMap(comparable: Map, base: Map): Boolean { + + for ((str, count) in comparable) { + when { + !base.contains(str) || base[str] != count -> return false + else -> continue + } + } + + return true +} + + +/** + * Prod Variant with More Kotlin Sugar + */ + +fun findSubstringProdVariantII(s: String, words: Array): List { + val wordLength = words.first().length + val totalLength = wordLength * words.size + + if (s.length < totalLength) return listOf() + + val wordCount = words.groupingBy { it }.eachCount() + + + return (0..s.length - totalLength).filter { start -> + val seen = mutableMapOf() + words.indices.all { i -> + val word = s.substring(start + i * wordLength, start + (i + 1) * wordLength) + wordCount.containsKey(word) && seen.merge(word, 1, Int::plus)!! <= wordCount[word]!! + } + } +} From a4b6d5a49dcf96afa60b206d6cb337e2e3a7edc5 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 30 Apr 2025 12:52:23 +0100 Subject: [PATCH 26/96] add 3392 prod variant --- .../contest/slidingWindow/SlidingWindowProdVariant.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 b7d4c4f5..5202631f 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -75,3 +75,14 @@ fun findSubstringProdVariantII(s: String, words: Array): List { } } } + +/** + * 3392. Count Subarrays of Length Three With a Condition + * Prod Variant + */ + +fun countSubArraysProdVariant(nums: IntArray): Int = + nums.toList().windowed(3).count { + (it.first() + it.last()).toDouble() == it[1].toDouble() / 2.0 + } + From bcaeacfe7aa731e3e3ba0a78742db6376803066a Mon Sep 17 00:00:00 2001 From: Danil M Date: Wed, 30 Apr 2025 09:23:29 -0400 Subject: [PATCH 27/96] add 1295 --- .../com/github/contest/math/MathLeetcode.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt index e018a27f..1603c1b0 100644 --- a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt +++ b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt @@ -191,3 +191,26 @@ fun numberOfPowerfulInt(start: Long, finish: Long, limit: Int, s: String): Long return if (s.toLong() in start..finish) counter + 1L else counter } + +/** + * 1295. Find Numbers with Even Number of Digits + */ + +val POW = intArrayOf(100_000, 10_000, 1_000, 100, 10, 1) + +fun findNumbers(nums: IntArray): Int = nums.filter { + isEven(it) +}.count() + +private fun isEven(num: Int): Boolean { + var even = true + + for (p in POW) { + if (num >= p) break + even = !even + } + + return even +} + + From 7adaf0fc592fe0ee372644479e52046620b9dd22 Mon Sep 17 00:00:00 2001 From: Danil M Date: Wed, 30 Apr 2025 09:35:34 -0400 Subject: [PATCH 28/96] change README.md --- README.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 139172aa..eb0d9e98 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,20 @@ -# solution algorithm problems +# Contest Kotlin + ![Kotlin](https://img.shields.io/badge/kotlin-%237F52FF.svg?style=for-the-badge&logo=kotlin&logoColor=white) ![Android Studio](https://img.shields.io/badge/Android%20Studio-3DDC84.svg?style=for-the-badge&logo=android-studio&logoColor=white) -## Task +# Description + +This repository contains problems of leetcode. We might use this repo how get solution for define +problem from leetcode. Also We might clone this repo and run or debug problems in android studio. + +# How to use + +1. Each problem will be in contest module +2. Each problem have a few solutions. Main solution with using down level code. Alternative Solution + with other approaches. Prod Variant - this code might be in prod in application or service. This + code using std lib kotlin +3. For search each problem have kotlin doc with name and number problem. Also each problem have tag + for commit for search in github. +4. Each Topic have package which contains problem -- [leetcode task](app/src/main/java/com/leetcode_kotlin/AlgorithmLeetcode.kt) -- [codeWars task](app/src/main/java/com/leetcode_kotlin/AlgorithmCodeWars.kt) From c01d4454af7af8e41b46a19ba8ff6839493c3b36 Mon Sep 17 00:00:00 2001 From: Danil M Date: Wed, 30 Apr 2025 11:30:08 -0400 Subject: [PATCH 29/96] add 2962 --- .../main/java/com/github/contest/Execute.kt | 7 +++-- .../slidingWindow/SlidingWindowLeetcode.kt | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 183b6c92..eafd7cbd 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -3,9 +3,10 @@ package com.github.contest import com.github.contest.hashTable.countGoodAlternativeSolution import com.github.contest.math.numberOfPowerfulInt +import com.github.contest.slidingWindow.countSubArrayWithMaxElement +import com.github.contest.slidingWindow.countSubArrays import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash -import com.github.contest.twoPointer.trap import java.util.TreeMap @@ -15,7 +16,9 @@ import java.util.TreeMap fun main() { - trap(intArrayOf(5, 1, 6, 2, 1, 2, 1, 3)).also { println(it) } + countSubArrayWithMaxElement( + intArrayOf(1, 3, 2, 3, 3), 2 + ).also { println(it) } } 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 9a6deacb..8c85f742 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -133,3 +133,31 @@ private fun equalsMap(comparable: Map, base: Map): Boo return true } + +/** + * 2962. Count Subarrays Where Max Element Appears at Least K Times + */ + +fun countSubArrayWithMaxElement(nums: IntArray, k: Int): Long { + val maxNum = nums.maxOrNull() ?: return 0 + var count = 0L + var left = 0 + var maxCount = 0 + + for (right in nums.indices) { + if (nums[right] == maxNum) { + maxCount++ + } + + // When we have at least k occurrences, we count all subarrays ending at right + while (maxCount >= k) { + count += nums.size - right + if (nums[left] == maxNum) { + maxCount-- + } + left++ + } + } + + return count +} From 45a2ee2731fec780f6d166497a3ecbb5b6c7fd1d Mon Sep 17 00:00:00 2001 From: Danil M Date: Wed, 30 Apr 2025 11:30:35 -0400 Subject: [PATCH 30/96] change comments --- .../com/github/contest/slidingWindow/SlidingWindowLeetcode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8c85f742..2da15132 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -149,7 +149,7 @@ fun countSubArrayWithMaxElement(nums: IntArray, k: Int): Long { maxCount++ } - // When we have at least k occurrences, we count all subarrays ending at right + while (maxCount >= k) { count += nums.size - right if (nums[left] == maxNum) { From cd931f68665992cdded839222ca3894a28b54a84 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 1 May 2025 15:41:22 +0100 Subject: [PATCH 31/96] add 228 --- .../com/github/contest/array/ArrayLeetcode.kt | 34 +++++++++++++++++++ 1 file changed, 34 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 aaaf4573..c2ca311d 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -207,5 +207,39 @@ fun rotate(nums: IntArray, k: Int) { } } +/** + * 228. Summary Ranges + */ + +fun summaryRanges(nums: IntArray): List { + val result = mutableListOf() + if (nums.isEmpty()) return result + + var start = nums[0] + var prev = nums[0] + + for (i in 1 until nums.size) { + if (nums[i] == prev + 1) { + prev = nums[i] + } else { + if (start == prev) { + result.add("$start") + } else { + result.add("$start->$prev") + } + start = nums[i] + prev = nums[i] + } + } + + // Add the last range + if (start == prev) { + result.add("$start") + } else { + result.add("$start->$prev") + } + + return result +} From b922510d973258280c34443faf425313a5e5b77d Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 1 May 2025 15:54:57 +0100 Subject: [PATCH 32/96] saving --- contest/src/main/java/com/github/contest/Execute.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index eafd7cbd..cab31315 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -3,8 +3,6 @@ package com.github.contest import com.github.contest.hashTable.countGoodAlternativeSolution import com.github.contest.math.numberOfPowerfulInt -import com.github.contest.slidingWindow.countSubArrayWithMaxElement -import com.github.contest.slidingWindow.countSubArrays import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,10 +14,6 @@ import java.util.TreeMap fun main() { - countSubArrayWithMaxElement( - intArrayOf(1, 3, 2, 3, 3), 2 - ).also { println(it) } - } From aaa4f18cad0431864928d94449425e7818bdc5f8 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 4 May 2025 17:34:22 +0100 Subject: [PATCH 33/96] add 1128 --- .../contest/hashTable/HashTableLeetcode.kt | 31 +++++++++++++++++++ 1 file changed, 31 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 42f536e3..d587d756 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -477,4 +477,35 @@ fun intToRoman(num: Int): String { return result.toString() } +/** + * 1128. Number of Equivalent Domino Pairs + */ + +fun numEquivDominoPairs(dominoes: Array): Int { + var count = 0 + val pairs = mutableMapOf, Int>() + + for (domino in dominoes) { + val base = Pair(domino[0], domino[1]) + val reversed = Pair(domino[1], domino[0]) + + when { + !pairs.contains(base) && !pairs.contains(reversed) -> pairs[base] = + pairs.getOrDefault(base, 0) + 1 + + pairs.contains(base) -> { + count += pairs.getOrDefault(base, 0) + pairs[base] = pairs.getOrDefault(base, 0) + 1 + } + + else -> { + count += pairs.getOrDefault(reversed, 0) + pairs[reversed] = pairs.getOrDefault(reversed, 0) + 1 + } + } + } + + return count +} + From c127efef10f595e5044478c4c8ec68dd6a7e75cb Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 5 May 2025 13:37:49 +0100 Subject: [PATCH 34/96] add 1128 prod variant --- contest/src/main/java/com/github/contest/Execute.kt | 8 +++++++- .../contest/hashTable/HashTableProdVariant.kt | 13 +++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index cab31315..e5e65b3b 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -2,6 +2,8 @@ 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 @@ -14,7 +16,11 @@ 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() { 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 2810adde..15fe5742 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -110,3 +110,16 @@ 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 } + + + From 7773fc657e45d2a74a3e551874a8076787fb5c0c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 6 May 2025 13:08:12 +0100 Subject: [PATCH 35/96] add 1920 --- .../java/com/github/contest/array/ArrayLeetcode.kt | 14 ++++++++++++++ 1 file changed, 14 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 c2ca311d..acbdd065 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -242,4 +242,18 @@ fun summaryRanges(nums: IntArray): List { return result } +/** + * 1920. Build Array from Permutation + */ + + +fun buildArray(nums: IntArray): IntArray { + val new = IntArray(nums.size) + + nums.forEachIndexed { index, _ -> + new[index] = nums[nums[index]] + } + + return new +} From ff76035b47ef680b11331add5ec85041a46e8980 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:12:05 +0100 Subject: [PATCH 36/96] add 56 --- .../com/github/contest/array/ArrayLeetcode.kt | 38 +++++++++++++++++++ 1 file changed, 38 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 acbdd065..7a62b585 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -1,5 +1,7 @@ package com.github.contest.array +import java.util.PriorityQueue + /** * 1800. Maximum Ascending Subarray Sum @@ -257,3 +259,39 @@ fun buildArray(nums: IntArray): IntArray { return new } +/** + * 56. Merge Intervals + */ + +fun merge(intervals: Array): Array { + if (intervals.size == 1) return intervals + + val pq = PriorityQueue { a: IntArray, b: IntArray -> a[0] - b[0] } + val k = 2 + var temp = IntArray(k) + val res = mutableListOf() + + for (interval in intervals) { + pq.offer(interval) + } + + val (start, end) = pq.poll() + temp[0] = start + temp[1] = end + + while (pq.isNotEmpty()) { + val (start, end) = pq.poll() + if (temp[1] in start..end) temp[1] = end + else if (temp[1] < start) { + res.add(temp) + temp = IntArray(k) + temp[0] = start + temp[1] = end + } + } + + res.add(temp) + + return res.toTypedArray() +} + From e05c039ffcd5b59899d8f7c871d04c68fce57ab0 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:43:15 +0100 Subject: [PATCH 37/96] add 56 for prod variant --- .../github/contest/array/ArrayProdVariant.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) 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 c2a2266f..659c1562 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -72,4 +72,27 @@ fun applyOperationsProdVariantII(nums: IntArray): IntArray { nums.fill(0, insertPos) return nums +} + +/** + * 56. Merge Intervals + * Prod Variant + */ + +fun mergeProdVariantStage(intervals: Array): Array { + if (intervals.size == 1) return intervals + + intervals.sortBy { it[0] } + val merged = mutableListOf() + var current = intervals[0] + + intervals.drop(1).forEach { + if (current[1] in it[0]..it[1]) current[1] = maxOf(current[1], it[1]) + else { + merged.add(current) + current = it + } + } + + return merged.toTypedArray() } \ No newline at end of file From 14b6f521643faba7d8881e45f1e56a4522153ea7 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:48:05 +0100 Subject: [PATCH 38/96] add new prod variant --- .../java/com/github/contest/array/ArrayProdVariant.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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 659c1562..f97b446b 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -95,4 +95,12 @@ fun mergeProdVariantStage(intervals: Array): Array { } return merged.toTypedArray() -} \ No newline at end of file +} + +fun mergeProdVariantII(intervals: Array): Array = + intervals.sortedBy { it[0] }.fold(mutableListOf()) { merged, interval -> + merged.lastOrNull()?.takeIf { it[1] >= interval[0] }?.let { + it[1] = maxOf(it[1], interval[1]) + } ?: merged.add(interval) + merged + }.toTypedArray() \ No newline at end of file From ebf47db25252864561020bd0e250aba4809bd08c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 15:02:47 +0100 Subject: [PATCH 39/96] add 1920 prod variant --- .../github/contest/array/ArrayProdVariant.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) 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 f97b446b..7ee7363e 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -74,6 +74,23 @@ fun applyOperationsProdVariantII(nums: IntArray): IntArray { return nums } +/** + * 1920. Build Array from Permutation + */ + +fun buildArrayProdVariant(nums: IntArray): IntArray { + nums.forEachIndexed { index, _ -> + val new = nums[nums[index]] % nums.size + val prev = nums[index] + nums[index] = (new * nums.size) + prev + } + nums.forEachIndexed { index, _ -> + nums[index] /= nums.size + } + + return nums +} + /** * 56. Merge Intervals * Prod Variant From 97aada247989b60e9a917d35d6db9d7b648d35d1 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 16:22:26 +0100 Subject: [PATCH 40/96] add 209 --- .../slidingWindow/SlidingWindowLeetcode.kt | 44 +++++++++++++++++++ 1 file changed, 44 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 2da15132..238ed13b 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -161,3 +161,47 @@ fun countSubArrayWithMaxElement(nums: IntArray, k: Int): Long { return count } + +/** + * 209. Minimum Size Subarray Sum + */ + +fun minSubArrayLen(target: Int, nums: IntArray): Int { + var minLen = Int.MAX_VALUE + var sum = 0 + var left = 0 + var currentLen = 0 + + for (element in nums) { + sum += element + currentLen++ + if (sum >= target) { + minLen = minOf(minLen, currentLen) + var localLen = minLen + while (sum >= target) { + if (sum == target) break + if (localLen == 1) return 1 + if (sum - nums[left] < target) break + else { + sum -= nums[left] + localLen-- + left++ + } + } + minLen = minOf(minLen, localLen) + currentLen = minOf(currentLen, localLen) + } + + + if (currentLen == minLen) { + sum -= nums[left] + left++ + currentLen-- + } + } + + return when { + minLen == Int.MAX_VALUE -> 0 + else -> minLen + } +} From b9762b19fc6a38e6e8ffa9a76a4f1f255e133df6 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 8 May 2025 16:07:22 +0100 Subject: [PATCH 41/96] add 992 --- .../slidingWindow/SlidingWindowLeetcode.kt | 32 +++++++++++++++++++ 1 file changed, 32 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 238ed13b..cc970657 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -205,3 +205,35 @@ fun minSubArrayLen(target: Int, nums: IntArray): Int { else -> minLen } } + +/** + * 992. Subarrays with K Different Integers + */ + +fun subArraysWithKDistinct(nums: IntArray, k: Int): Int { + return atMostK(nums, k) - atMostK(nums, k - 1) +} + +private fun atMostK(nums: IntArray, k: Int): Int { + var count = 0 + val freq = mutableMapOf() + var left = 0 + + for (right in nums.indices) { + val num = nums[right] + freq[num] = freq.getOrDefault(num, 0) + 1 + + while (freq.size > k) { + val leftNum = nums[left] + freq[leftNum] = freq[leftNum]!! - 1 + if (freq[leftNum] == 0) { + freq.remove(leftNum) + } + left++ + } + + count += right - left + 1 + } + + return count +} From b250072f49752ae6ab05d580cd5be3e708fd82d3 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 9 May 2025 07:48:54 +0100 Subject: [PATCH 42/96] 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 43/96] 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 44/96] 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 45/96] 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 46/96] 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 47/96] 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 48/96] 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 49/96] 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 50/96] 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 51/96] 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 52/96] 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 53/96] 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 } } + From 07c54697d491f88e3388b4a043e3bb855f418180 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 12 May 2025 11:33:43 +0100 Subject: [PATCH 54/96] add 2094 in hashMap --- .../main/java/com/github/contest/Execute.kt | 20 +++++++++----- .../contest/hashTable/HashTableLeetcode.kt | 27 +++++++++++++++++++ 2 files changed, 41 insertions(+), 6 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 3990e68e..85bfa8a3 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,8 +1,9 @@ package com.github.contest -import com.github.contest.array.minSum +import com.github.contest.array.findEvenNumbers import com.github.contest.math.numberOfPowerfulInt +import com.github.contest.slidingWindow.longestDupSubstring import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -14,14 +15,21 @@ 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) } + findEvenNumbers(intArrayOf(2, 2, 8, 8, 2)).also { it.printArray() } } -fun countGoodData() { +fun longestDupSubStringTest() { + val test = + "vbaemlrfvasubbuxdqohlpkuuznigzebcegorztmbngdocautqbegnbamqitrowtucjldexfsgiiiicbyeigrjjgbtbsiznccwohanmutudceffflnlfywnbqotypictesbhgndbkgfooltzahgbdtctjytzgwsnotwwhzyrifhwqbxtkewnxyjhycgfaauruqpbrnuztbxlevgobccydnhbppisqelmuapoqjnlmnyrkfflhjlkwvookwgcbtoxtdnlobwbqvsaazljjywftktgibiluzlqeybtbawrxqtzpeiyfggysbebdpozozpuatpbvlvsbortvbtaizaabfbgushkrxgtswvnhqflgyebzzdhzeicllkhdrrxqxqivnxdfeqmcupctvluztykhirmcklsjcdfrckxhallwcprxboywmidxbqbnbtzfygzbqyksjvqnljloxjkmuolxgmljhmrgsqjkovezqwmdfxrfjctfsecaspjzbahvqsfgnlfghsjnrduchnhzrkzlbkkdnuyfogmcrrkzltofyihfvpgobhzcslffhgkwowafqkgdduieeqjbhqpixqkrcswlajhohhvxrcdxylbfdmgkeyueohvsbuebdlrkvmkmonlpaougbashynlpujhvdnyizpuwdgiuvwjwkfenfwvgjixfrgcwuaevrbrvhbpdxabkffxmduundrswyxtszznrceomffpfhspmzoycltrqmmmkjhcijrblvrxdyokfibrjrsmcndszrhkaqolzgmndgkiebuklvdvnvhrkmmkgvuglkrlqgaummesnzczwiujfddqrraxmwgxgzkxfkttxzmkyqlvyhggmlwecwdoujoajyzqjukiuyuuogrppavcntiqrnglzunkvnagjmofmicbqtsgvpkjiubzhhmiezszovfahvfudjxufrcaiolqimrrufaaguzvpgxxbetgosctlgvtuhletcwpjyppsqmiyjhbocicukxhrsanzlsvpqkyocniucqtlzubbefxpceixexwpprgheevgueawwvhwqjzuqxltdvqitozkigsmmpugvwcssmqkxpgnouispyckpbvxjplwehcadhuxtmjqbsdqmmkdmmqdpnazcnxiubkaiezbqlrudxmrjwwximbzzbydrxmlzwnhdnjtycpdzbukxsihfjjgmhmdfyrgwgnztyvtdkwcmspllxvsgeaunmaumrajzqivofotqnwehlrskomsunmkzmemfhxfxfannqhfdfllsefctsuphgzgvguanrfmzhzmyitdneqfiwjdqdtzmufhachntpzuwbgwjbazfqgqoqtgtofhjnojpwzknafldnippkowcwmtmiziwhphuetlcsxruecyumnlwdhbzwuoevwccnkytdlxxjorptrjfeuehcfhabvewtizguzczlzwwqqljhxqmruvvbcvczbbsmcbgbfgoeemwuyfexwqosnmwqjyrnbmzdpffunvasixmieqfcivvwhrotrhgvtfyimfcabfsjcgtgxyjhvgffztysbenwlmhxtjxuopfswybvykeuskztdzlgdbfonmngxldocigajhxhtcdnmegrdsagvfwirkqqxvebelcpubwqdcdpgmjkgjsbqpjjbbzaxebdrfsnhqdksjcbvlnbwfcmwnxxqwxpcbstgmjndmaxxcaspnvntzzpmypfuouxrpsybblgqlgnpgiewdtpdsgrsxynovmfkefnirwyecnukvaibuzeoixhfywvtiddmiqwbmugqicddcleylkptkwaiswbcbgqjynlnhtfrvixzwdyhonaalckfalhbtxnrkagutmlowipsmnzccbepeouebdiubvnnvwjqiveefvxtlyxnabfgpzmqdwmgrcvoyfegckmhgldrkagmelutnimsfyyyctnaaticgvkmipfuplgtzcpmlbeqbeoezdgaxpcdmmrudwrtjxoicdwngadketqexwewnizbxsyaqptzokkqpgdwhginaytzwzvmiwnfolfeabfplpfawlydristimsflprtleazsgfshljucrwycvdvfwrokltvbmrmsrokzvfgiqalhzjlwnhblapvlksmyjbrdpdcmklvbngkmrwiefkrfbmqoffmqgfvxlyjvjgyymllghtkofevjqnxxslqarlzejlzuratglemuzyihcfqvspslaintunxfyzapzvxmbjgaiqjmvbhpqactkqmgdmmdloumlsamdionyyavzhksjnlwdzcilqnyghmrzmdfussussrrccjlrwjwwoehetilauecjkhfczcuutnwvzjmvtirhobnhjakffmqpvwtwypqrcmpdwdzrosycvlmgoymtmckhaddaswswijagmbxatxfpltvzrjudoemohppznjxwsxegaehudmlofipyujbinnywepxsavqsuwzvaireweudombixeslrtjxihrjehdyeetgommkqjpfvqpsuifnbrnlyewcoccuiycxkpjbyzivrxpohvbkmqwmxuqlwshfqjedyngymotenjsvgvfuodilyyywqfbjofmpvsnhijnvufscdayrdgcdeaawhdhxltmgncnvndtjkllnllerriuxkwvtadrnydtmhijulcdwoolbzsssaprnlngnsxaqdvekeqfrsinizzkarevttmihzpwrozkruqcagjszthjsitvbaqxtcfcewzxlajeuaixgrrhlarfjmammsjivrkbnlyalihikphqjyywyrbjdewqwhytykuowvqjfxtppahaahwzyzkcdgscqsvocseapxmuwfllisniajjajucocwqsoojtgnvvmhrjpcwxwkhyvrzgnbvpaniqbtjjihevqxefbaeymoyihxoubljbztrcodmxmsscqwktyqrnesvlplhsxtvyopadumaghskxquqqnkdreafvmmolhjjwylzuazahtlgjhybukfoohvktjygrjpnkbmednhkgsqrbosyzzopjjzcszjllaaxdobgbkqjeiagzvgawupfdrkxqvjdvlabaehboaltknbjihjhbbmgswdkroopaoqauzdjboeoehxoojvpmkvegaoaperrvjrpkwamlgcrnzfbkbswlpctstvjxmauxtkipmwctytizzmkcgipwnkqgizfwzausmcjaymvwheviqhkwsbufoknwlssksmegqohqccojgmsytexnirswehspamcubibryiiamwmvketekqtskooqvihvvjswutpsdztryfmilgmvyiokwcarnkpivhgpcvihvdytklbvrqsrygcwlenyqeimlodpjnweqvzagbxztqsrywnlbcjthtfuhjktwgxpdzrjarkvjdmhzbtcfewmydjhmtalbacfztqbmbwvgkdhlykseghejqmylmlmmptnkkoxnmstwxajvmccujggbsgmhtaviujsgzptmiokfqudfyfzjnfkgnwpgwkosvjyvytjihtqaptfnaewnmivzekgdxwxsfwnepyozsebhzgxzmtnackaivinselmmjcsyagzslackgzmvubvylxhifwcmhpyqrqrrwsmjtqwbriwljukurtdzrhlzwjrpbkjzdvjwnfzenyrysdslwxkofvpdgitjtcjwzsumztsotjmlpexnejdlfsondjxwlgumaoabjspdebqvhpilzmygenvjysfkazycpzdbtsgztwubmdonpnvvcqfajmmlolodmrgfmmhfjbixgxmxkhtmxamiobucmkiydofpdmvoqdnwczumipyfpnqfokicwsczihplwmzmrmiunegvthdkwtqmfaobsqcczroxfpjxeuttybpskucgnussuivoaxrarhzwwlvcfqwfslxcfcluydotmljmiaobhoagzxigoelirlmypxsndiiptsdcuufekfkldurtbcbupntennsqwchrukvrgbvqghbldseexhzovutijnahphzmrudyvyqefspimwpldqaaktkvikdxrcjlymlwkbartrcinrttjttvoeqwovuixftyseuehuydnaldtewcarxovplmlhukmpietclayjfmjqpexnixehlcwyojfkuszeyuhlwfuctfuijrvtocacexauiigcafhabqmzxidroybzpxtgztifskzbsffumovpejoeruvhswhjvcpwxzbskcvcjazvrwmxhdbyxwirvraqtsnqrqidtdieghaxfowmrykowufrlikeazxtphzknhpvqruvfqhxotnlovczdogfnfadozpbggwwxstfjaexutkiopjtdrarwbwlalojunhtfbyobeoxyyhmnririikfjgsmtgvntehbfhpjmdgmeoyrhikpruwcaqqwxnjssstzcliqqrcufcoolydcvcgxsxtrkfkexfezqmrjdtdkwryhselnitmaqgsdlehkjnkccblhxqutksacynrggdjxldcwhlhsbtwdwhktyemizomzbfikkrjwuludydxzwucvbpobtdlutzuvgcfrvqprblubptblnfgruxuqagmvhgqokxhhnyyqjuuyovmbcsuxrpptxbpekhuwhdewbcplzjjpevsiqnfjcwdzaufkbcgifkfjpuuqfffjdxrvmzeoxjpxdxhfzqpgcwptqljvrqgwoarabvrahiykfhpgxhpcdevwshtlxchlcyofvffcnfpvngbmnsqrzmnrtgcqkjemjstezzjmgyjtgniufynemavfizytichtubavcjhijtepgollmyqzangjneexgnrcqrxuchfncjcizqtlolmpbtaozenitemkxmebvjoxutftjyhxmtmnoodqsqyoxkywycytomqifvcowjokeaxvpaljsjxpvxoucmpqygaebcuznijulipckandlnugkicousevafbdjvdzgottxivhikmtxjbkrgyoyfjykmbvhgupvniuxfdfqqapzczsiagifrirdlmnsjepwnjwsmbkeeadizysbgagaixftmsnvxctmlpeatrexrkfsixuqzaqhawcmqshpuabiqiijzmisynkikezjhrshpwvgocxleztujbfkpncocmwotxzaptjeqemgikrmlkjulqedggriupxpnwrcqaiigxoqhidssoogeujmcavwrumesdiigrsoojfxrirlyhrebardcmbugnaytjjzcdnsmupfeircpihslavpmwlummuhxfgzjvtxskdwsuzjeibriyhwwusiimpfsxgdvzcnjflbbkmgunxengakbssjhkrbjxeexitgofkrrwxomxszfvjgnesuqjxzgbgdkzmagwraurogqiivdterxwnphlpnovtawhcffufznviddqyhjcajanyhapxpksrjzuoeqvfdqngvfgcpjeajuatusqlckdnjzdppyuuqiamngqervgdpjwlboxfyctjdwysxuopcobswuyqrhtgqrtrhswhurqzqqtpkhepvgjuchktofbgyuxfnwmjpejhuewgmbxjjgdlqpgguhnsdmzsklccrnjnriufjrpuashsknyeunzzcysokwsdjercmlixezrgtyydnzijohisfajrwdxhhomvzwsfvlmolmsylchclqwssfkpjjyqxkmyigdfsrudeoerqlvbdstwxfnionbnanlivpopiktmazgqkbtqtootwbbmqcaqrlzncpclbxzbwhtjlmbecpzysbnidnzxaamdrqqsorvmboxmcasepsfjtssyhtxhvjmoaegqydezrcntcfzuxedsyxrfsoppaddailqioujfywadbazzgethekowbdmdjrdtdvbrrkzsgzvhbwiiacreofdrlruuiznluofmyeggfdphzyrbciisplkaceukehyaxdovjudoxtxwtqavyinqtzqxglhksfmqkbntvtkvmhtfytcybrowrhtzsdjmixevysowlarzikgigkihbzgugztacemncriclyywzrxjcdtkndrqczlkzgkdnxqpqatbzuzalwlpzezohtemsrytylxlkpcaqxbrrardycsxiunrnrffjebjpywznabdxcwpenucrobbiotvhadseebvezwrzxxzztqfjkhcykgjabgibjagpedvdanfxmexhuesemxeydnzeuhffjnxntstthyqvcpdwuxciuigxyfdsolzyayntrgmaefwiubeqyiytrhspmwjdjkdjjqdcxrcdwamrbshabivupnldlwguglercjvbaaexasoclxeofzkumxyytgubsyvwhqxiqdhtwvvjszzaalumiumbdjevhzrrsqbktidrfaczbdzbowqwsezvngsxflozbrkxbpqgqvhryhtnfjlzplvdrpaybqyejkbkzusrpzjnieapnmpczkhqzhqczqhiciscckvrmehuijkxvzcwljomtfpsvwbygtclgxeselomvamsbormxfbqksliqmiwhmjplojpbyeyyqtcekqdprwcjhmzvuycihstxbjbbnbcduejgumwmkaxrmzmgzroijhgmsjohksmhwvnqkleulemxdafcrtkcdsrxdffqzrxvnmnzyutjyhhdimhbitenovkrcrjbjgyyvnxthsehalkkatlknrxdmjwqbgtmmtkhhjcobhwduinuczgrqdufpqxqwtclmoutzzkcgigaqtxuudlnjhsyarqykulxkgsjfclnmtpdnozjslwduqduitvupgrzmmitqvidpyiemhngumlpcolmjghynaxbmfxfdfisfsyuzncuzojccwqmdxkqyitmpqrsybmftkzvycpzqaduwugbttttbngsfznddzjymktmmklekpzjlfkeyeybtgwyhjcmknlwxgkmryqdppmavxevdezwmvuueygqntplazxtxnwmfjocivxlzyhotdizeqqrkfcmgbferbswkhysexffwotrsbrwuhneossuvxamavklekfiknnibhztkqrezfipzckuzmjahvnliuvshjclsbecuyhtdrleuvatjjvrhkepfajollzdmgfgemcjeppampvvzrmibtxivgxgtyjfeookdsvjhkjtaeobvdjzyghtogzhfiolyewbyrkfcvaearfxwowuwgnmmovrwldwszyqskwwgyaiphflxehvkwjwkeqistfkufaorylxxnhovncutjqdgzbsgrbamimgnmxeniemxlauaepvqhyyicqottqibcqqrnxevdqvqsprzgopnnnwrdmmxfuahlryyoewtwrjricqprfcguaxzpjwuezbpqcpgglzdckunnkcereklhhkwsjqwirnavficqjfvtziglkkeqwrzfdvymnwwhmycrgejrjelkorxaebtcssivbaemlrfvasubbuxdqohlpkuuznigzebcegorztmbngdocautqbegnbamqitrowtucjldexfsgiiiicbyeigrjjgbtbsiznccwohanmutudceffflnlfywnbqotypictesbhgndbkgfooltzahgbdtctjytzgwsnotwwhzyrifhwqbxtkewnxyjhycgfaauruqpbrnuztbxlevgobccydnhbppisqelmuapoqjnlmnyrkfflhjlkwvookwgcbtoxtdnlobwbqvsaazljjywftktgibiluzlqeybtbawrxqtzpeiyfggysbebdpozozpuatpbvlvsbortvbtaizaabfbgushkrxgtswvnhqflgyebzzdhzeicllkhdrrxqxqivnxdfeqmcupctvluztykhirmcklsjcdfrckxhallwcprxboywmidxbqbnbtzfygzbqyksjvqnljloxjkmuolxgmljhmrgsqjkovezqwmdfxrfjctfsecaspjzbahvqsfgnlfghsjnrduchnhzrkzlbkkdnuyfogmcrrkzltofyihfvpgobhzcslffhgkwowafqkgdduieeqjbhqpixqkrcswlajhohhvxrcdxylbfdmgkeyueohvsbuebdlrkvmkmonlpaougbashynlpujhvdnyizpuwdgiuvwjwkfenfwvgjixfrgcwuaevrbrvhbpdxabkffxmduundrswyxtszznrceomffpfhspmzoycltrqmmmkjhcijrblvrxdyokfibrjrsmcndszrhkaqolzgmndgkiebuklvdvnvhrkmmkgvuglkrlqgaummesnzczwiujfddqrraxmwgxgzkxfkttxzmkyqlvyhggmlwecwdoujoajyzqjukiuyuuogrppavcntiqrnglzunkvnagjmofmicbqtsgvpkjiubzhhmiezszovfahvfudjxufrcaiolqimrrufaaguzvpgxxbetgosctlgvtuhletcwpjyppsqmiyjhbocicukxhrsanzlsvpqkyocniucqtlzubbefxpceixexwpprgheevgueawwvhwqjzuqxltdvqitozkigsmmpugvwcssmqkxpgnouispyckpbvxjplwehcadhuxtmjqbsdqmmkdmmqdpnazcnxiubkaiezbqlrudxmrjwwximbzzbydrxmlzwnhdnjtycpdzbukxsihfjjgmhmdfyrgwgnztyvtdkwcmspllxvsgeaunmaumrajzqivofotqnwehlrskomsunmkzmemfhxfxfannqhfdfllsefctsuphgzgvguanrfmzhzmyitdneqfiwjdqdtzmufhachntpzuwbgwjbazfqgqoqtgtofhjnojpwzknafldnippkowcwmtmiziwhphuetlcsxruecyumnlwdhbzwuoevwccnkytdlxxjorptrjfeuehcfhabvewtizguzczlzwwqqljhxqmruvvbcvczbbsmcbgbfgoeemwuyfexwqosnmwqjyrnbmzdpffunvasixmieqfcivvwhrotrhgvtfyimfcabfsjcgtgxyjhvgffztysbenwlmhxtjxuopfswybvykeuskztdzlgdbfonmngxldocigajhxhtcdnmegrdsagvfwirkqqxvebelcpubwqdcdpgmjkgjsbqpjjbbzaxebdrfsnhqdksjcbvlnbwfcmwnxxqwxpcbstgmjndmaxxcaspnvntzzpmypfuouxrpsybblgqlgnpgiewdtpdsgrsxynovmfkefnirwyecnukvaibuzeoixhfywvtiddmiqwbmugqicddcleylkptkwaiswbcbgqjynlnhtfrvixzwdyhonaalckfalhbtxnrkagutmlowipsmnzccbepeouebdiubvnnvwjqiveefvxtlyxnabfgpzmqdwmgrcvoyfegckmhgldrkagmelutnimsfyyyctnaaticgvkmipfuplgtzcpmlbeqbeoezdgaxpcdmmrudwrtjxoicdwngadketqexwewnizbxsyaqptzokkqpgdwhginaytzwzvmiwnfolfeabfplpfawlydristimsflprtleazsgfshljucrwycvdvfwrokltvbmrmsrokzvfgiqalhzjlwnhblapvlksmyjbrdpdcmklvbngkmrwiefkrfbmqoffmqgfvxlyjvjgyymllghtkofevjqnxxslqarlzejlzuratglemuzyihcfqvspslaintunxfyzapzvxmbjgaiqjmvbhpqactkqmgdmmdloumlsamdionyyavzhksjnlwdzcilqnyghmrzmdfussussrrccjlrwjwwoehetilauecjkhfczcuutnwvzjmvtirhobnhjakffmqpvwtwypqrcmpdwdzrosycvlmgoymtmckhaddaswswijagmbxatxfpltvzrjudoemohppznjxwsxegaehudmlofipyujbinnywepxsavqsuwzvaireweudombixeslrtjxihrjehdyeetgommkqjpfvqpsuifnbrnlyewcoccuiycxkpjbyzivrxpohvbkmqwmxuqlwshfqjedyngymotenjsvgvfuodilyyywqfbjofmpvsnhijnvufscdayrdgcdeaawhdhxltmgncnvndtjkllnllerriuxkwvtadrnydtmhijulcdwoolbzsssaprnlngnsxaqdvekeqfrsinizzkarevttmihzpwrozkruqcagjszthjsitvbaqxtcfcewzxlajeuaixgrrhlarfjmammsjivrkbnlyalihikphqjyywyrbjdewqwhytykuowvqjfxtppahaahwzyzkcdgscqsvocseapxmuwfllisniajjajucocwqsoojtgnvvmhrjpcwxwkhyvrzgnbvpaniqbtjjihevqxefbaeymoyihxoubljbztrcodmxmsscqwktyqrnesvlplhsxtvyopadumaghskxquqqnkdreafvmmolhjjwylzuazahtlgjhybukfoohvktjygrjpnkbmednhkgsqrbosyzzopjjzcszjllaaxdobgbkqjeiagzvgawupfdrkxqvjdvlabaehboaltknbjihjhbbmgswdkroopaoqauzdjboeoehxoojvpmkvegaoaperrvjrpkwamlgcrnzfbkbswlpctstvjxmauxtkipmwctytizzmkcgipwnkqgizfwzausmcjaymvwheviqhkwsbufoknwlssksmegqohqccojgmsytexnirswehspamcubibryiiamwmvketekqtskooqvihvvjswutpsdztryfmilgmvyiokwcarnkpivhgpcvihvdytklbvrqsrygcwlenyqeimlodpjnweqvzagbxztqsrywnlbcjthtfuhjktwgxpdzrjarkvjdmhzbtcfewmydjhmtalbacfztqbmbwvgkdhlykseghejqmylmlmmptnkkoxnmstwxajvmccujggbsgmhtaviujsgzptmiokfqudfyfzjnfkgnwpgwkosvjyvytjihtqaptfnaewnmivzekgdxwxsfwnepyozsebhzgxzmtnackaivinselmmjcsyagzslackgzmvubvylxhifwcmhpyqrqrrwsmjtqwbriwljukurtdzrhlzwjrpbkjzdvjwnfzenyrysdslwxkofvpdgitjtcjwzsumztsotjmlpexnejdlfsondjxwlgumaoabjspdebqvhpilzmygenvjysfkazycpzdbtsgztwubmdonpnvvcqfajmmlolodmrgfmmhfjbixgxmxkhtmxamiobucmkiydofpdmvoqdnwczumipyfpnqfokicwsczihplwmzmrmiunegvthdkwtqmfaobsqcczroxfpjxeuttybpskucgnussuivoaxrarhzwwlvcfqwfslxcfcluydotmljmiaobhoagzxigoelirlmypxsndiiptsdcuufekfkldurtbcbupntennsqwchrukvrgbvqghbldseexhzovutijnahphzmrudyvyqefspimwpldqaaktkvikdxrcjlymlwkbartrcinrttjttvoeqwovuixftyseuehuydnaldtewcarxovplmlhukmpietclayjfmjqpexnixehlcwyojfkuszeyuhlwfuctfuijrvtocacexauiigcafhabqmzxidroybzpxtgztifskzbsffumovpejoeruvhswhjvcpwxzbskcvcjazvrwmxhdbyxwirvraqtsnqrqidtdieghaxfowmrykowufrlikeazxtphzknhpvqruvfqhxotnlovczdogfnfadozpbggwwxstfjaexutkiopjtdrarwbwlalojunhtfbyobeoxyyhmnririikfjgsmtgvntehbfhpjmdgmeoyrhikpruwcaqqwxnjssstzcliqqrcufcoolydcvcgxsxtrkfkexfezqmrjdtdkwryhselnitmaqgsdlehkjnkccblhxqutksacynrggdjxldcwhlhsbtwdwhktyemizomzbfikkrjwuludydxzwucvbpobtdlutzuvgcfrvqprblubptblnfgruxuqagmvhgqokxhhnyyqjuuyovmbcsuxrpptxbpekhuwhdewbcplzjjpevsiqnfjcwdzaufkbcgifkfjpuuqfffjdxrvmzeoxjpxdxhfzqpgcwptqljvrqgwoarabvrahiykfhpgxhpcdevwshtlxchlcyofvffcnfpvngbmnsqrzmnrtgcqkjemjstezzjmgyjtgniufynemavfizytichtubavcjhijtepgollmyqzangjneexgnrcqrxuchfncjcizqtlolmpbtaozenitemkxmebvjoxutftjyhxmtmnoodqsqyoxkywycytomqifvcowjokeaxvpaljsjxpvxoucmpqygaebcuznijulipckandlnugkicousevafbdjvdzgottxivhikmtxjbkrgyoyfjykmbvhgupvniuxfdfqqapzczsiagifrirdlmnsjepwnjwsmbkeeadizysbgagaixftmsnvxctmlpeatrexrkfsixuqzaqhawcmqshpuabiqiijzmisynkikezjhrshpwvgocxleztujbfkpncocmwotxzaptjeqemgikrmlkjulqedggriupxpnwrcqaiigxoqhidssoogeujmcavwrumesdiigrsoojfxrirlyhrebardcmbugnaytjjzcdnsmupfeircpihslavpmwlummuhxfgzjvtxskdwsuzjeibriyhwwusiimpfsxgdvzcnjflbbkmgunxengakbssjhkrbjxeexitgofkrrwxomxszfvjgnesuqjxzgbgdkzmagwraurogqiivdterxwnphlpnovtawhcffufznviddqyhjcajanyhapxpksrjzuoeqvfdqngvfgcpjeajuatusqlckdnjzdppyuuqiamngqervgdpjwlboxfyctjdwysxuopcobswuyqrhtgqrtrhswhurqzqqtpkhepvgjuchktofbgyuxfnwmjpejhuewgmbxjjgdlqpgguhnsdmzsklccrnjnriufjrpuashsknyeunzzcysokwsdjercmlixezrgtyydnzijohisfajrwdxhhomvzwsfvlmolmsylchclqwssfkpjjyqxkmyigdfsrudeoerqlvbdstwxfnionbnanlivpopiktmazgqkbtqtootwbbmqcaqrlzncpclbxzbwhtjlmbecpzysbnidnzxaamdrqqsorvmboxmcasepsfjtssyhtxhvjmoaegqydezrcntcfzuxedsyxrfsoppaddailqioujfywadbazzgethekowbdmdjrdtdvbrrkzsgzvhbwiiacreofdrlruuiznluofmyeggfdphzyrbciisplkaceukehyaxdovjudoxtxwtqavyinqtzqxglhksfmqkbntvtkvmhtfytcybrowrhtzsdjmixevysowlarzikgigkihbzgugztacemncriclyywzrxjcdtkndrqczlkzgkdnxqpqatbzuzalwlpzezohtemsrytylxlkpcaqxbrrardycsxiunrnrffjebjpywznabdxcwpenucrobbiotvhadseebvezwrzxxzztqfjkhcykgjabgibjagpedvdanfxmexhuesemxeydnzeuhffjnxntstthyqvcpdwuxciuigxyfdsolzyayntrgmaefwiubeqyiytrhspmwjdjkdjjqdcxrcdwamrbshabivupnldlwguglercjvbaaexasoclxeofzkumxyytgubsyvwhqxiqdhtwvvjszzaalumiumbdjevhzrrsqbktidrfaczbdzbowqwsezvngsxflozbrkxbpqgqvhryhtnfjlzplvdrpaybqyejkbkzusrpzjnieapnmpczkhqzhqczqhiciscckvrmehuijkxvzcwljomtfpsvwbygtclgxeselomvamsbormxfbqksliqmiwhmjplojpbyeyyqtcekqdprwcjhmzvuycihstxbjbbnbcduejgumwmkaxrmzmgzroijhgmsjohksmhwvnqkleulemxdafcrtkcdsrxdffqzrxvnmnzyutjyhhdimhbitenovkrcrjbjgyyvnxthsehalkkatlknrxdmjwqbgtmmtkhhjcobhwduinuczgrqdufpqxqwtclmoutzzkcgigaqtxuudlnjhsyarqykulxkgsjfclnmtpdnozjslwduqduitvupgrzmmitqvidpyiemhngumlpcolmjghynaxbmfxfdfisfsyuzncuzojccwqmdxkqyitmpqrsybmftkzvycpzqaduwugbttttbngsfznddzjymktmmklekpzjlfkeyeybtgwyhjcmknlwxgkmryqdppmavxevdezwmvuueygqntplazxtxnwmfjocivxlzyhotdizeqqrkfcmgbferbswkhysexffwotrsbrwuhneossuvxamavklekfiknnibhztkqrezfipzckuzmjahvnliuvshjclsbecuyhtdrleuvatjjvrhkepfajollzdmgfgemcjeppampvvzrmibtxivgxgtyjfeookdsvjhkjtaeobvdjzyghtogzhfiolyewbyrkfcvaearfxwowuwgnmmovrwldwszyqskwwgyaiphflxehvkwjwkeqistfkufaorylxxnhovncutjqdgzbsgrbamimgnmxeniemxlauaepvqhyyicqottqibcqqrnxevdqvqsprzgopnnnwrdmmxfuahlryyoewtwrjricqprfcguaxzpjwuezbpqcpgglzdckunnkcereklhhkwsjqwirnavficqjfvtziglkkeqwrzfdvymnwwhmycrgejrjelkorxaebtcssiwoikdejksjnjsrtjdzupooposqhulcejqmvvteglotximsrrrmjhaywuofobhvkzjivcobqewpmkheeyqngslemblcftxruhzrloudsqsfdzljabwivjmhmzjrsjlpqkgdabhvtbcwdnhdqdllozsdydwtmhkcuqiurrrnstlvitaywnlnodqphmitusyqkimezerrzcpivpiufuhtzziilsehmexxmkblquepwtzslkosgvlfwwohqurdyqckcfxszbkvxlpkvdebarjwnzgetzjtpldsscmrfymekeqhhulkmuizvqfopqhhbmztqnmvmbawfqfonqyzkjafzgvpwewasxvimigyjiwqacensfmfonmnvketoctjbrtozzokhlakpgxjlkqzzdpupvnfyjobaipbjelrrnbgtarfmiglnxhcvvhvgywggojpuuiljltcmmjyusmjrtlmqvhwteebsnsojbzsouxaggbdanmsiaezxmxsqetkrnydozvfvshdbigbxvtgxyhumgmekhoeuohlpeqkxxpaiybftxnqvwmhfynphdvbrcmijeuicjikhjrcghsddgmigzancvrvaddjkxrmhzyqkpttwnyculmcmoqrkhmmmsxwrokapirbakwyxvctipwudolpxablsakjoukffdjfnfdmcgikxghcuusruveowoamjmuopfvekaspgazfgiiadctzzyovmqkxcgnrlixxjpmrqmxwuhzzjuzisnghfsghyuajcxgnmtfeheddlcdwycetrmcweidecfnhcwuqrzvydydqcgmcitvbfxxmgcqkherlcmctlztrzwhddufnndpuaogitxtadkofysykttdspmxugeivhzskpyuivplyazfyrfkmypgocdkkjsittafjyzrwpcwrdcrwjeiitoyxtikddsywudhscbqtfnmjrefakqkfeidatndwhbubgevkfmekbqvuwdwgthozrrzmgekphhsnlnysbecewayvdxdwervxkxkqbuhldzyonygqelvblvwqsbmytjydgiwkedvifvyuwhkashdfdzvvdjwwsuzbexlibisgdtczamauudbzfwuihsgzmfcqdnbgvvoboqcqeckailzpjwzqofsbmutriuzfqpighlxmphoxvooempvaupdjjxcttebltjsburpkadjvtaafpxgmmjxxizrcdsnzbhayyrizutuotwvjvbxhnufxtyzzqparwapvtzwntqdopbzkcwurqbpmzqnpfniepabibxxundleekpihlczmrnljacrnkvemwootmkipvpviedrpfqbyeokgqbwcyapwpdpdnzuloptuuklccmagcmpuplxnlojctafiabtqqolnywpdlrlpeaktljhzxsbqtjyvkuldiyqjxfmkwxzaalwlufmrxqhqzillczokzetwjhiihikhtguolhhjzpbyzpjbqynpejoqqwazekgatdqgmxrlotlnkuoaucrbnftdctdidlkwqadeaupopcezzsbvwtwjyppciunohxmyarcaouodwsfvngtlbpxahoerirfppspplurzoffmakkpsdcwszybnctxuapluecgytfoakbawlrrqunktlmjnfijhxwceyicrprsauuyhmrxgehbrvmhcvskupmynudfjwzlqtmxhdwnkfrbbdidabnvqzvftymfulqmhcloihesnvtqaetbhhyxitecurjoezdleocmwielfzbfdwikfgjocoswhbmlcpzigduelapqcsxfqgswodkqtcoafdohunqasmedpvvrpsygyqenuqfnswqzzeitrawjnaoewjvndtvemztipyvjwlivrrrkrnvgnjmluhbadwerwxzlxwxukfrbyimsxjanvnapwbpbyvsusthsqemcmffmoteldhayubnscfuaamwvignymbcaghnwbtkeakcwlrpqyjqbxpwfxlfjojmurztssdyvpatbtirstjttarazeijsrvokwhcqmancchfwrwqnhlgkeijiquckrqunazgmztoeatcurshbfnljxurqrtailuylteavxqbamdudxdgcsrlpoeffzfpkcnyxraurqvrcanixqoziimzwqfdrkscoicmzcisselxeyfeqvfadsabkfgcrbgijkwioedgiofppmtfiainsipfpvjiwrqhbmsptvxbjdsyrngzooniwennzwvynofqczfvufzektcbhibxyqfwutjvrhvhxdzzcfxxmwdwphxyqavqqbnmwwipfdwcgyelfbirzlnosmnknidflqshoaxufvyotezyfjpewevqridgsglewdnmfkilihbblactltxhyuzrecxxkkdiosvvddinmjoylstwmsfmnhdrjcqwmvecozyrfgersurdnkcbdjnqqqjcuaygveljejclricjdwpsgrtlaibtalvunvciznufwwqqfvzkroezhzlkhodhbabovdzwtteppufwrhikxmkhlvrujwblwebtkardtvulscjjlsuieepsbimkeqxcwzvgznlvigiakrmvlifsovkpfybkobmlcktbzfyhnikzayungzfwwpleqooercrtolxnsvxfejgghatpbblasyeimunewexnpuajszoyiwgpwbeacpavnedcysiwxfjocmywlouulaljdqjghjbxpgznzhmyoxoslmoxdktqmebqwlwewzbohcbglpgznvuyjixmvsehzgzvtxbrwefgijmtytvnopmxxlmuescdybatbelxkqftzsmanhndwbcwnqstjuyjyafzeqypiekkywkngxsebwconvjyrhjrhosogtfpzpbznlotkgalccbpzmpttzkdnftuaylznmaazowjuwxwaaocnfviehnumgqmgbntpnwobszvqyuqzksoppywxoqjwgydjlyybuoconaemwxnipdzhbvernpotnrebpecmsgagifsechotkoaljgdxwtslkzmbdqpwxqchxwmbdawpozaaffzbatnmsbqwsfsrxwyuumxxpumfvohawgewatlsubqogkhegiaauazlunrreytahxyhsjbpmudtenzlvbnrbndxawoewigdhhmasqpfkuaojzbecpyeedbebslxctdjarjvhaatvciedllfalleoplphyojrrsulersetmbvwiyhvfkgrqwgdlnbzyvtsreyiydbmgwiqwslbctsupyycnzcnwxgndgvbjwosuykqswswrkrhlpjaqnonmwapcytoujipjshcqzyimrpxgazzqnoclquqonelyochgjjxlkhxbywkyvlolztypnoecuraithretqpdxmgvkqtgbktcfrssiywepynkfgoaweftsmodejlivekaxeuhcqmtqbfwjuyfaeassoxwzigvorxovsvakjvbmbzvxzcxfcrxspwsxcpovocrgzttlqwxrxvoyxnecfbuuzotcfhxulqcnlxycvxvsukruzxweysayjwcofbitsngfkehgddayptsoqqvrixrtvvibwsuqfawsgfalkcjzwdqovnhgkyzivhjscfijfgdnodyygkaepsulfcrrcszycisepapwjtjxwkxewxklpfywjronkploadspghmrcxqbhnffnstezrbklrxxgjlgofywmknrhdsrtxygrrmqlnawgyvnjgvzltwzflqpriikigszaesluujauepdknfxibwoonffxnpftjhtqbgkvpmqtcvfpacxdznsosxnfptbycwoddayunqormvimyhqzvknphcxwvaxzwncbodybtouhjcuhlmgiyvyfyxevxdvvqzzeexhalbhufderrkzpizxiwbdtgapwcqbinkiamswtvaknnmevlbfieidklshnkkxxuiziawcxwomlariosnwzwzjjuqyecvexddhfbldaaplciuqdhocfolqkeoogmufpanvbaabarpfajxdsmfacsqmyhcftxmizbfcchgezvjzgjeavlaxdtlcanjtmvdlzlobsuhrrtsxcwxxhawnthrtucojzruyckzvgjmxcfwedudnuzanitievwnunkvsuwndfbahixlotobppdcxwmcrkpnzzirwfgbkibssafgvuhkjkohialbkapkczdagkbtuenmhsvcoenarbjzeubqwsaateacqdvkikyrcvttaivrmesqavgwpjxjpznhfirpsrgwnbrnkmgyqaqswypnhoyyplfuvylpqrodtfsfsadkatfyrwmbkmbbyhythjlxdzcwewdywglzbqzumnvyaxbagzvplgpofrmkqpkovvpynpsbeozgnbgvcckpkzdqtpcjemxbknzzesbiicpxdxsizexkgdczuekbsjceyeecyfnghcdnbxxbbwnjzriwxuxpezucfafdfslowqdxnaarxpayilwfftvjvrmartgynroliskvunotersncqsjkptfihhbcnzpfqcnimkczzwesqrugldsbyxjfhnjuoyzecoopzroapuuhnopzticshnzoajjpjkvmzkdabtcsowzdmqehygzgwbuwmfnxsjlrtotwixoyvpbjfgqgosmkvijhqwgifsbaiwwstmqqduzlcrrqjfdepmnfkwnsoqsymrrhfhxjdyufqlybsdihpxnbtctjtoihhzpmgovmprrheriwuselqtplxkvsydafcrukhpwwjqdnjomeiqrylgmkrhdrkfzowtydkxatnfjyvvcelweyeqixxlpjsqxojyuvxwpmbykztpdgljgraopzcgjuwilhifcfbtretedmtiuesaxsrmtvuerspcbxjgfmzytvcyjvhebzgztznouktmciqghcmoqlnjgpiqnpwqqerlefbypumtefzmjlazzpjhhtzukxmacengjogalvvpcxdlkemjvvtcouyyulawppeagmcrhxglwmwhsjqnglqxioxcbayspesvqwoawxlsjkzbtqobdgylxynyyntntllkkzkgyxyhhykcqbethehgcwhcmaqfndpxebddbcmiaxnqytlhxuocrvedxwkkzcigfnjgpxprwcjuvveuruyirfnobaadcilhwwontffqhomelsadmzndgdtjduofezmavcqphvhqlvwzoxeayrgewznztcgadtazxsqfpzvbuucirgjrzpxwqkxmoemuzotwhlbwkzzevbnmjydjpchfoetdkfzjwsgdfjbpkbvfektoiyzzaihpoauzitienqjsckjongwurpibqjbqrihhkbgswryljhflsoahxwbonlrduuwncdxphdhfwgrgnwthntrkrsahermamiqqonfxspcpxtxmqqudmnpdfpmlizoujgnzvuwnjzegsbtkspngccljtyxcznyitlkqggfrfmyantkhianmcbxwzwayjyiekuusbajiojibctlmtaaxbyvcuvcgunkghhaijjrxtbavulkpoknrkkuhiynelzktgkdpvwmoynmuaykqizivlectcpxqojlxvomrnbhnothqtthcupxgvbzxszniiyfgpuxeverlaabtuixozwwuxyurxjahkfnzbmfwtwhvwjostohtmfpmdjdctdkdlzemmjlfhsadbqwvgfqtkffqpkskqepbevpseazlvbqwtotatlvgrcyioquexjhbgxvkzuxuxptqeoszaphttfbiwxmtiuwottaspzpmoieuwxuyobrihuqfrcazyynrrpkgozudjyxhvtgkxzueuklnolpnjeecuoiipclaaliygqkdpehlqsbefqrquwsqmazeemehzofgerjwxtjnnkrtcjjzhcpteoxjdeqcsxixosvlleyyrrttcdsjhkdlacwdgmizlqwzktmxxmyogriiwcsdovrpznugccfntdpfwddvqbkwsuerywuntnetdybfbguwljbjngefhqdakhtlgpybdcwgcxnffhdsthbininvyqxlzqwhfwjiahqcffkmnnfguioiqddrvaeusaexypiywacdgmqtavbufrewwhprjtnbvrbtgjrfltirgamixnedgjbcsqvejjfeaizjtqoflywtzjbwyizhrallshpbqvhsfgdzytgkseftnjporrvktgvmplpfizanhdogxusrzzkoibebublokhczsthcshramgilccedbosmsynmazckiejcyseqzvsodczgeejiudwmcjbekdqsibuiuyavwtjzxlherrolwkaatdeeguwqytystznpuxrtkyxbrloqvqqptxvatrqrmrjgsxvmwofinfjgqxwmondhmyjfrcxetiklfhzdwglllwrcwqqkfttrtfwkhvoceanliorguctgbmixcyhhtcamhxwqsnsyphkxvbfqfywglgdpgmxzpxlywjprwjpmrzlmcteiraoeisuogtnvsawpkniiwxunzicdbglsjczrwtgcmvyewwvgjdofdlvetxhwdvqmxpgtimvwjvdftancgcijpdpicygftwusmalwojtxgyfaysceumplrettfbbyyvrkxegnpbkybpyaicgerwqiclchnfinabxzffmxjwvkovmyzteqrwbtifdxknkmojlvqxsztnmjkyhktmckifgsklrwydiootjfqcgmrsxetfqmtszdyfyksrhqvrellpqdtxrnrprkwhzpzyuzfsmxktphmvszmldgkwtbnkojrpaspvuupgtbbkknffptquzaqsdeetpxiqqxnmteuogvyskfxzzntypmtvqxohvzxnymbsrvgzqhtcmrengxmyjhtbejlbiiqhxrbqmjreqkhfdlskkgiwndzumkvvvmesffksqbwhldopqgbbplxcowyahwxcibwpighbheiujylagobvzaapwyqfupjetfudnbewhorrmetttuqsuqksraanrjskroqgrudbjwsvalqvhhodzyxqaxetjygaowgfqlgzhaxinpduytzytxqvuwrdwxfktoslzanhbkrqbwlaqmaljqjgpallxtyshqdgqqptcgkedxevjgivyrdnrobojzgqrmzjcqffxrlcorzzxhwvbzjsqmjznrsgdrpghwngnykdpldmtzjwbsorgzqtrizubrclpprdpegeplskncgowxfdwxyniykjrmugeoltssahfsusuagrznwwlultuvclkzuonfjfxjofcixylermrnieiuxcrcqbbkropbtpkjuournhxetrsevcatervwvwgmmynfnyqjokabtagnratocthikefhcnuolhvahmjwymzsmhhfhatlvdwhhdpkqjaesweakoyicxcofltonociryqzbhltqlzijektuieyiimpuhdjxhspfkqirbejodrajcvfmzdwkrlgarpyyjnetdowoikdejksjnjsrtjdzupooposqhulcejqmvvteglotximsrrrmjhaywuofobhvkzjivcobqewpmkheeyqngslemblcftxruhzrloudsqsfdzljabwivjmhmzjrsjlpqkgdabhvtbcwdnhdqdllozsdydwtmhkcuqiurrrnstlvitaywnlnodqphmitusyqkimezerrzcpivpiufuhtzziilsehmexxmkblquepwtzslkosgvlfwwohqurdyqckcfxszbkvxlpkvdebarjwnzgetzjtpldsscmrfymekeqhhulkmuizvqfopqhhbmztqnmvmbawfqfonqyzkjafzgvpwewasxvimigyjiwqacensfmfonmnvketoctjbrtozzokhlakpgxjlkqzzdpupvnfyjobaipbjelrrnbgtarfmiglnxhcvvhvgywggojpuuiljltcmmjyusmjrtlmqvhwteebsnsojbzsouxaggbdanmsiaezxmxsqetkrnydozvfvshdbigbxvtgxyhumgmekhoeuohlpeqkxxpaiybftxnqvwmhfynphdvbrcmijeuicjikhjrcghsddgmigzancvrvaddjkxrmhzyqkpttwnyculmcmoqrkhmmmsxwrokapirbakwyxvctipwudolpxablsakjoukffdjfnfdmcgikxghcuusruveowoamjmuopfvekaspgazfgiiadctzzyovmqkxcgnrlixxjpmrqmxwuhzzjuzisnghfsghyuajcxgnmtfeheddlcdwycetrmcweidecfnhcwuqrzvydydqcgmcitvbfxxmgcqkherlcmctlztrzwhddufnndpuaogitxtadkofysykttdspmxugeivhzskpyuivplyazfyrfkmypgocdkkjsittafjyzrwpcwrdcrwjeiitoyxtikddsywudhscbqtfnmjrefakqkfeidatndwhbubgevkfmekbqvuwdwgthozrrzmgekphhsnlnysbecewayvdxdwervxkxkqbuhldzyonygqelvblvwqsbmytjydgiwkedvifvyuwhkashdfdzvvdjwwsuzbexlibisgdtczamauudbzfwuihsgzmfcqdnbgvvoboqcqeckailzpjwzqofsbmutriuzfqpighlxmphoxvooempvaupdjjxcttebltjsburpkadjvtaafpxgmmjxxizrcdsnzbhayyrizutuotwvjvbxhnufxtyzzqparwapvtzwntqdopbzkcwurqbpmzqnpfniepabibxxundleekpihlczmrnljacrnkvemwootmkipvpviedrpfqbyeokgqbwcyapwpdpdnzuloptuuklccmagcmpuplxnlojctafiabtqqolnywpdlrlpeaktljhzxsbqtjyvkuldiyqjxfmkwxzaalwlufmrxqhqzillczokzetwjhiihikhtguolhhjzpbyzpjbqynpejoqqwazekgatdqgmxrlotlnkuoaucrbnftdctdidlkwqadeaupopcezzsbvwtwjyppciunohxmyarcaouodwsfvngtlbpxahoerirfppspplurzoffmakkpsdcwszybnctxuapluecgytfoakbawlrrqunktlmjnfijhxwceyicrprsauuyhmrxgehbrvmhcvskupmynudfjwzlqtmxhdwnkfrbbdidabnvqzvftymfulqmhcloihesnvtqaetbhhyxitecurjoezdleocmwielfzbfdwikfgjocoswhbmlcpzigduelapqcsxfqgswodkqtcoafdohunqasmedpvvrpsygyqenuqfnswqzzeitrawjnaoewjvndtvemztipyvjwlivrrrkrnvgnjmluhbadwerwxzlxwxukfrbyimsxjanvnapwbpbyvsusthsqemcmffmoteldhayubnscfuaamwvignymbcaghnwbtkeakcwlrpqyjqbxpwfxlfjojmurztssdyvpatbtirstjttarazeijsrvokwhcqmancchfwrwqnhlgkeijiquckrqunazgmztoeatcurshbfnljxurqrtailuylteavxqbamdudxdgcsrlpoeffzfpkcnyxraurqvrcanixqoziimzwqfdrkscoicmzcisselxeyfeqvfadsabkfgcrbgijkwioedgiofppmtfiainsipfpvjiwrqhbmsptvxbjdsyrngzooniwennzwvynofqczfvufzektcbhibxyqfwutjvrhvhxdzzcfxxmwdwphxyqavqqbnmwwipfdwcgyelfbirzlnosmnknidflqshoaxufvyotezyfjpewevqridgsglewdnmfkilihbblactltxhyuzrecxxkkdiosvvddinmjoylstwmsfmnhdrjcqwmvecozyrfgersurdnkcbdjnqqqjcuaygveljejclricjdwpsgrtlaibtalvunvciznufwwqqfvzkroezhzlkhodhbabovdzwtteppufwrhikxmkhlvrujwblwebtkardtvulscjjlsuieepsbimkeqxcwzvgznlvigiakrmvlifsovkpfybkobmlcktbzfyhnikzayungzfwwpleqooercrtolxnsvxfejgghatpbblasyeimunewexnpuajszoyiwgpwbeacpavnedcysiwxfjocmywlouulaljdqjghjbxpgznzhmyoxoslmoxdktqmebqwlwewzbohcbglpgznvuyjixmvsehzgzvtxbrwefgijmtytvnopmxxlmuescdybatbelxkqftzsmanhndwbcwnqstjuyjyafzeqypiekkywkngxsebwconvjyrhjrhosogtfpzpbznlotkgalccbpzmpttzkdnftuaylznmaazowjuwxwaaocnfviehnumgqmgbntpnwobszvqyuqzksoppywxoqjwgydjlyybuoconaemwxnipdzhbvernpotnrebpecmsgagifsechotkoaljgdxwtslkzmbdqpwxqchxwmbdawpozaaffzbatnmsbqwsfsrxwyuumxxpumfvohawgewatlsubqogkhegiaauazlunrreytahxyhsjbpmudtenzlvbnrbndxawoewigdhhmasqpfkuaojzbecpyeedbebslxctdjarjvhaatvciedllfalleoplphyojrrsulersetmbvwiyhvfkgrqwgdlnbzyvtsreyiydbmgwiqwslbctsupyycnzcnwxgndgvbjwosuykqswswrkrhlpjaqnonmwapcytoujipjshcqzyimrpxgazzqnoclquqonelyochgjjxlkhxbywkyvlolztypnoecuraithretqpdxmgvkqtgbktcfrssiywepynkfgoaweftsmodejlivekaxeuhcqmtqbfwjuyfaeassoxwzigvorxovsvakjvbmbzvxzcxfcrxspwsxcpovocrgzttlqwxrxvoyxnecfbuuzotcfhxulqcnlxycvxvsukruzxweysayjwcofbitsngfkehgddayptsoqqvrixrtvvibwsuqfawsgfalkcjzwdqovnhgkyzivhjscfijfgdnodyygkaepsulfcrrcszycisepapwjtjxwkxewxklpfywjronkploadspghmrcxqbhnffnstezrbklrxxgjlgofywmknrhdsrtxygrrmqlnawgyvnjgvzltwzflqpriikigszaesluujauepdknfxibwoonffxnpftjhtqbgkvpmqtcvfpacxdznsosxnfptbycwoddayunqormvimyhqzvknphcxwvaxzwncbodybtouhjcuhlmgiyvyfyxevxdvvqzzeexhalbhufderrkzpizxiwbdtgapwcqbinkiamswtvaknnmevlbfieidklshnkkxxuiziawcxwomlariosnwzwzjjuqyecvexddhfbldaaplciuqdhocfolqkeoogmufpanvbaabarpfajxdsmfacsqmyhcftxmizbfcchgezvjzgjeavlaxdtlcanjtmvdlzlobsuhrrtsxcwxxhawnthrtucojzruyckzvgjmxcfwedudnuzanitievwnunkvsuwndfbahixlotobppdcxwmcrkpnzzirwfgbkibssafgvuhkjkohialbkapkczdagkbtuenmhsvcoenarbjzeubqwsaateacqdvkikyrcvttaivrmesqavgwpjxjpznhfirpsrgwnbrnkmgyqaqswypnhoyyplfuvylpqrodtfsfsadkatfyrwmbkmbbyhythjlxdzcwewdywglzbqzumnvyaxbagzvplgpofrmkqpkovvpynpsbeozgnbgvcckpkzdqtpcjemxbknzzesbiicpxdxsizexkgdczuekbsjceyeecyfnghcdnbxxbbwnjzriwxuxpezucfafdfslowqdxnaarxpayilwfftvjvrmartgynroliskvunotersncqsjkptfihhbcnzpfqcnimkczzwesqrugldsbyxjfhnjuoyzecoopzroapuuhnopzticshnzoajjpjkvmzkdabtcsowzdmqehygzgwbuwmfnxsjlrtotwixoyvpbjfgqgosmkvijhqwgifsbaiwwstmqqduzlcrrqjfdepmnfkwnsoqsymrrhfhxjdyufqlybsdihpxnbtctjtoihhzpmgovmprrheriwuselqtplxkvsydafcrukhpwwjqdnjomeiqrylgmkrhdrkfzowtydkxatnfjyvvcelweyeqixxlpjsqxojyuvxwpmbykztpdgljgraopzcgjuwilhifcfbtretedmtiuesaxsrmtvuerspcbxjgfmzytvcyjvhebzgztznouktmciqghcmoqlnjgpiqnpwqqerlefbypumtefzmjlazzpjhhtzukxmacengjogalvvpcxdlkemjvvtcouyyulawppeagmcrhxglwmwhsjqnglqxioxcbayspesvqwoawxlsjkzbtqobdgylxynyyntntllkkzkgyxyhhykcqbethehgcwhcmaqfndpxebddbcmiaxnqytlhxuocrvedxwkkzcigfnjgpxprwcjuvveuruyirfnobaadcilhwwontffqhomelsadmzndgdtjduofezmavcqphvhqlvwzoxeayrgewznztcgadtazxsqfpzvbuucirgjrzpxwqkxmoemuzotwhlbwkzzevbnmjydjpchfoetdkfzjwsgdfjbpkbvfektoiyzzaihpoauzitienqjsckjongwurpibqjbqrihhkbgswryljhflsoahxwbonlrduuwncdxphdhfwgrgnwthntrkrsahermamiqqonfxspcpxtxmqqudmnpdfpmlizoujgnzvuwnjzegsbtkspngccljtyxcznyitlkqggfrfmyantkhianmcbxwzwayjyiekuusbajiojibctlmtaaxbyvcuvcgunkghhaijjrxtbavulkpoknrkkuhiynelzktgkdpvwmoynmuaykqizivlectcpxqojlxvomrnbhnothqtthcupxgvbzxszniiyfgpuxeverlaabtuixozwwuxyurxjahkfnzbmfwtwhvwjostohtmfpmdjdctdkdlzemmjlfhsadbqwvgfqtkffqpkskqepbevpseazlvbqwtotatlvgrcyioquexjhbgxvkzuxuxptqeoszaphttfbiwxmtiuwottaspzpmoieuwxuyobrihuqfrcazyynrrpkgozudjyxhvtgkxzueuklnolpnjeecuoiipclaaliygqkdpehlqsbefqrquwsqmazeemehzofgerjwxtjnnkrtcjjzhcpteoxjdeqcsxixosvlleyyrrttcdsjhkdlacwdgmizlqwzktmxxmyogriiwcsdovrpznugccfntdpfwddvqbkwsuerywuntnetdybfbguwljbjngefhqdakhtlgpybdcwgcxnffhdsthbininvyqxlzqwhfwjiahqcffkmnnfguioiqddrvaeusaexypiywacdgmqtavbufrewwhprjtnbvrbtgjrfltirgamixnedgjbcsqvejjfeaizjtqoflywtzjbwyizhrallshpbqvhsfgdzytgkseftnjporrvktgvmplpfizanhdogxusrzzkoibebublokhczsthcshramgilccedbosmsynmazckiejcyseqzvsodczgeejiudwmcjbekdqsibuiuyavwtjzxlherrolwkaatdeeguwqytystznpuxrtkyxbrloqvqqptxvatrqrmrjgsxvmwofinfjgqxwmondhmyjfrcxetiklfhzdwglllwrcwqqkfttrtfwkhvoceanliorguctgbmixcyhhtcamhxwqsnsyphkxvbfqfywglgdpgmxzpxlywjprwjpmrzlmcteiraoeisuogtnvsawpkniiwxunzicdbglsjczrwtgcmvyewwvgjdofdlvetxhwdvqmxpgtimvwjvdftancgcijpdpicygftwusmalwojtxgyfaysceumplrettfbbyyvrkxegnpbkybpyaicgerwqiclchnfinabxzffmxjwvkovmyzteqrwbtifdxknkmojlvqxsztnmjkyhktmckifgsklrwydiootjfqcgmrsxetfqmtszdyfyksrhqvrellpqdtxrnrprkwhzpzyuzfsmxktphmvszmldgkwtbnkojrpaspvuupgtbbkknffptquzaqsdeetpxiqqxnmteuogvyskfxzzntypmtvqxohvzxnymbsrvgzqhtcmrengxmyjhtbejlbiiqhxrbqmjreqkhfdlskkgiwndzumkvvvmesffksqbwhldopqgbbplxcowyahwxcibwpighbheiujylagobvzaapwyqfupjetfudnbewhorrmetttuqsuqksraanrjskroqgrudbjwsvalqvhhodzyxqaxetjygaowgfqlgzhaxinpduytzytxqvuwrdwxfktoslzanhbkrqbwlaqmaljqjgpallxtyshqdgqqptcgkedxevjgivyrdnrobojzgqrmzjcqffxrlcorzzxhwvbzjsqmjznrsgdrpghwngnykdpldmtzjwbsorgzqtrizubrclpprdpegeplskncgowxfdwxyniykjrmugeoltssahfsusuagrznwwlultuvclkzuonfjfxjofcixylermrnieiuxcrcqbbkropbtpkjuournhxetrsevcatervwvwgmmynfnyqjokabtagnratocthikefhcnuolhvahmjwymzsmhhfhatlvdwhhdpkqjaesweakoyicxcofltonociryqzbhltqlzijektuieyiimpuhdjxhspfkqirbejodrajcvfmzdwkrlgarpyyjnetdo" + println(test.length) + + longestDupSubstring(test).also { + println( + it + ) + println(it.length) + } } 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 98e76ed3..dd87bc84 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -529,3 +529,30 @@ fun countVowelSubstrings(word: String): Int { return count } +/** + * 2094. Finding 3-Digit Even Numbers + */ + + +fun findEvenNumbers(digits: IntArray): IntArray { + val result = mutableSetOf() + val n = digits.size + + for (i in 0 until n) { + if (digits[i] == 0) continue + + for (j in 0 until n) { + if (j == i) continue + + for (k in 0 until n) { + + if (k == i || k == j || digits[k] % 2 != 0) continue + + val num = digits[i] * 100 + digits[j] * 10 + digits[k] + result.add(num) + } + } + } + + return result.sorted().toIntArray() +} From 264beb362877a9609895b86d08c099a6ec8a20a2 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 12 May 2025 13:59:02 +0100 Subject: [PATCH 55/96] add 2094 alternative solution --- .../main/java/com/github/contest/Execute.kt | 4 +-- .../hashTable/HashTableAlternativeSolution.kt | 30 +++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 85bfa8a3..1f544a87 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.array.findEvenNumbers +import com.github.contest.hashTable.findEvenNumbersAlternativeSolution import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.longestDupSubstring import com.github.contest.strings.fullJustify @@ -15,7 +15,7 @@ import java.util.TreeMap fun main() { - findEvenNumbers(intArrayOf(2, 2, 8, 8, 2)).also { it.printArray() } + findEvenNumbersAlternativeSolution(intArrayOf(1, 2, 3)).also { it.printArray() } } fun longestDupSubStringTest() { diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt index ea6995ae..cda22a12 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt @@ -84,4 +84,34 @@ fun countGoodAlternativeSolution(nums: IntArray, k: Int): Long { } return count +} + +/** + * 2094. Finding 3-Digit Even Numbers + */ + +fun findEvenNumbersAlternativeSolution(digits: IntArray): IntArray { + val freq = IntArray(10) + digits.forEach { freq[it]++ } + + val result = mutableListOf() + + for (h in 1..9) { + if (freq[h] == 0) continue + + for (t in 0..9) { + if (freq[t] == 0 || (t == h && freq[t] < 2)) continue + + for (u in 0..8 step 2) { + if (freq[u] == 0) continue + if (u == h && u == t && freq[u] < 3) continue + if (u == h && freq[u] < 2) continue + if (u == t && freq[u] < 2) continue + + result.add(h * 100 + t * 10 + u) + } + } + } + + return result.sorted().toIntArray() } \ No newline at end of file From 90dc0aef35705349f2b95b228a8ff10e230ed5dd Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 13 May 2025 14:47:50 +0100 Subject: [PATCH 56/96] add impl rabin - karp and 187 problem --- .../main/java/com/github/contest/CustomEXT.kt | 12 +- .../main/java/com/github/contest/Execute.kt | 33 ++++- .../priorityqueue/PriorityQueueProdVariant.kt | 4 +- .../slidingWindow/SlidingWindowLeetcode.kt | 19 +++ .../customStructure/RabinKarpImpl.kt | 127 ++++++++++++++++++ 5 files changed, 185 insertions(+), 10 deletions(-) create mode 100644 contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt diff --git a/contest/src/main/java/com/github/contest/CustomEXT.kt b/contest/src/main/java/com/github/contest/CustomEXT.kt index decd3699..396f67b8 100644 --- a/contest/src/main/java/com/github/contest/CustomEXT.kt +++ b/contest/src/main/java/com/github/contest/CustomEXT.kt @@ -1,17 +1,17 @@ package com.github.contest -fun MutableMap.removeIfEmptyBucket(key: Int) { - this[key] = this.getOrDefault(key, 0) - 1 + +fun MutableMap.removeIfEmptyBucket(key: K) { if (this[key] == 0) this.remove(key) } - -fun Any.printData(label: String) { - println("$label $this") +fun MutableMap.reduceCount(key: K) { + this[key] = this.getOrDefault(key, 0) - 1 + removeIfEmptyBucket(key) } -inline fun abs(number: Int): Int = when { +fun abs(number: Int): Int = when { number < 0 -> number * -1 else -> number } \ No newline at end of file diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 1f544a87..57c7e5af 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,8 +1,9 @@ package com.github.contest -import com.github.contest.hashTable.findEvenNumbersAlternativeSolution import com.github.contest.math.numberOfPowerfulInt +import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern +import com.github.contest.slidingWindow.customStructure.slidingWindowClassic import com.github.contest.slidingWindow.longestDupSubstring import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash @@ -15,9 +16,37 @@ import java.util.TreeMap fun main() { - findEvenNumbersAlternativeSolution(intArrayOf(1, 2, 3)).also { it.printArray() } + launchPerformance() } + +fun launchPerformance() { + + val text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit".repeat(10) + val patterns = listOf( + "Lorem", "ipsum", "dolor", "sit", "amet", + "consectetur", "adipiscing", "elit", "xyz", "abc" + ) + + measureTime("Rabin - Karp Algorithm") { + rabinKarpMultiPattern(text, patterns) + } + + measureTime("Sliding Window Algorithm") { + slidingWindowClassic(text, patterns) + } + + +} + +private fun measureTime(message: String, block: () -> Unit) { + val start = System.currentTimeMillis() + block() + val end = System.currentTimeMillis() + println("$message Time - ${end - start} ms") +} + + fun longestDupSubStringTest() { val test = diff --git a/contest/src/main/java/com/github/contest/priorityqueue/PriorityQueueProdVariant.kt b/contest/src/main/java/com/github/contest/priorityqueue/PriorityQueueProdVariant.kt index 2869c722..a03b51fa 100644 --- a/contest/src/main/java/com/github/contest/priorityqueue/PriorityQueueProdVariant.kt +++ b/contest/src/main/java/com/github/contest/priorityqueue/PriorityQueueProdVariant.kt @@ -6,7 +6,7 @@ package com.github.contest.priorityqueue fun topKFrequentProdVariant(nums: IntArray, k: Int): IntArray { val freq = mutableMapOf() - val repeated = Array>(nums.size + 1) {mutableListOf()} + val repeated = Array>(nums.size + 1) { mutableListOf() } for (num in nums) freq[num] = freq.getOrDefault(num, 0) + 1 @@ -14,5 +14,5 @@ fun topKFrequentProdVariant(nums: IntArray, k: Int): IntArray { repeated[count].add(num) } - return repeated.flatMap {it}.takeLast(k).toIntArray() + return repeated.flatMap { it }.takeLast(k).toIntArray() } \ No newline at end of file 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 eeb68294..aba05c3c 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -300,4 +300,23 @@ fun minimumSumSubarray(nums: List, l: Int, r: Int): Int { return TODO("Make this method") } +/** + * 187. Repeated DNA Sequences + */ + +fun findRepeatedDnaSequences(s: String): List { + if (s.length < 10) return listOf() + + val dnas = s.windowed(10).map { it }.groupingBy { it }.eachCount() + val res = mutableListOf() + + for ((key, value) in dnas) { + if (value > 1) res.add(key) + } + + + return res +} + + diff --git a/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt b/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt new file mode 100644 index 00000000..b36a3013 --- /dev/null +++ b/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt @@ -0,0 +1,127 @@ +package com.github.contest.slidingWindow.customStructure + + +fun rabinKarpSearch(text: String, pattern: String): List { + val d = 256 // Размер алфавита (ASCII) + val q = 101 // Простое число для избежания переполнения + val m = pattern.length + val n = text.length + var patternHash = 0 // Хеш образца + var textHash = 0 // Хеш текущего окна в тексте + var h = 1 // Значение для "скользящего" хеша: h = d^(m-1) + val result = mutableListOf() + + if (n < m || m == 0 || n == 0) return result + + // Вычисляем h = d^(m-1) % q + for (i in 0 until m - 1) { + h = (h * d) % q + } + + // Вычисляем начальные хеши для образца и первого окна текста + for (i in 0 until m) { + patternHash = (d * patternHash + pattern[i].code) % q + textHash = (d * textHash + text[i].code) % q + } + + // Проходим по тексту + for (i in 0..n - m) { + // Если хеши совпали, проверяем символы один за другим + if (patternHash == textHash) { + var match = true + for (j in 0 until m) { + if (text[i + j] != pattern[j]) { + match = false + break + } + } + if (match) { + result.add(i) + } + } + + // Вычисляем хеш для следующего окна текста + if (i < n - m) { + textHash = (d * (textHash - text[i].code * h) + text[i + m].code) % q + // Обеспечиваем положительное значение хеша + if (textHash < 0) textHash += q + } + } + + return result +} + +fun rabinKarpMultiPattern(text: String, patterns: List): Map> { + val d = 256 + val q = 101 + val result = mutableMapOf>() + val patternHashes = mutableMapOf>() + + // Предварительно вычисляем хеши всех образцов + for (pattern in patterns.distinct()) { + val m = pattern.length + if (m == 0 || m > text.length) continue + + var hash = 0 + for (i in 0 until m) { + hash = (d * hash + pattern[i].code) % q + } + + patternHashes.getOrPut(hash) { mutableListOf() }.add(pattern) + result[pattern] = mutableListOf() + } + + // Ищем все возможные длины образцов + val lengths = patterns.map { it.length }.distinct().sorted() + + for (m in lengths) { + if (m == 0 || m > text.length) continue + + var h = 1 + for (i in 0 until m - 1) { + h = (h * d) % q + } + + var textHash = 0 + // Вычисляем хеш первого окна + for (i in 0 until m) { + textHash = (d * textHash + text[i].code) % q + } + + // Проверяем первый хеш + patternHashes[textHash]?.forEach { pattern -> + if (pattern.length == m && text.startsWith(pattern, 0)) { + result[pattern]?.add(0) + } + } + + // Скользим по тексту + for (i in 1..text.length - m) { + // Обновляем хеш + textHash = (d * (textHash - text[i - 1].code * h) + text[i + m - 1].code) % q + if (textHash < 0) textHash += q + + // Проверяем совпадения + patternHashes[textHash]?.forEach { pattern -> + if (pattern.length == m && text.startsWith(pattern, i)) { + result[pattern]?.add(i) + } + } + } + } + + return result +} + +fun slidingWindowClassic(text: String, patterns: List): List { + val res = mutableListOf() + + for (pattern in patterns) { + val window = pattern.length + text.windowed(window) { + if (it == pattern) res.add(0) + } + } + + return res +} \ No newline at end of file From b92c78ae65abc258bd6097acf041e77c4df68ece Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 13 May 2025 14:48:47 +0100 Subject: [PATCH 57/96] add prod variant for 187 --- .../slidingWindow/SlidingWindowProdVariant.kt | 14 ++++++++++++++ 1 file changed, 14 insertions(+) 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 b4685c04..e959b165 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -96,3 +96,17 @@ fun minimumSumSubarrayProdVariant(nums: List, l: Int, r: Int): Int = buildL nums.windowed(window).map { it.sum() }.filter { it > 0 }.forEach { add(it) } } }.minOrNull() ?: -1 + +/** + * 187. Repeated DNA Sequences + * Prod Variant + */ + +fun findRepeatedDnaSequencesProdVariant(s: String): List = when { + s.length < 10 -> listOf() + else -> buildList { + s.windowed(10).map { it }.groupingBy { it }.eachCount().forEach { (key, value) -> + if (value > 1) add(key) + } + } +} From 8f3978078750c1da169a2ae107cfb2eba51e1d7a Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 13 May 2025 15:42:12 +0100 Subject: [PATCH 58/96] change exe --- contest/src/main/java/com/github/contest/Execute.kt | 13 ++++++------- 1 file changed, 6 insertions(+), 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 57c7e5af..cc73082b 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,7 +4,6 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.longestDupSubstring import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -53,12 +52,12 @@ fun longestDupSubStringTest() { "vbaemlrfvasubbuxdqohlpkuuznigzebcegorztmbngdocautqbegnbamqitrowtucjldexfsgiiiicbyeigrjjgbtbsiznccwohanmutudceffflnlfywnbqotypictesbhgndbkgfooltzahgbdtctjytzgwsnotwwhzyrifhwqbxtkewnxyjhycgfaauruqpbrnuztbxlevgobccydnhbppisqelmuapoqjnlmnyrkfflhjlkwvookwgcbtoxtdnlobwbqvsaazljjywftktgibiluzlqeybtbawrxqtzpeiyfggysbebdpozozpuatpbvlvsbortvbtaizaabfbgushkrxgtswvnhqflgyebzzdhzeicllkhdrrxqxqivnxdfeqmcupctvluztykhirmcklsjcdfrckxhallwcprxboywmidxbqbnbtzfygzbqyksjvqnljloxjkmuolxgmljhmrgsqjkovezqwmdfxrfjctfsecaspjzbahvqsfgnlfghsjnrduchnhzrkzlbkkdnuyfogmcrrkzltofyihfvpgobhzcslffhgkwowafqkgdduieeqjbhqpixqkrcswlajhohhvxrcdxylbfdmgkeyueohvsbuebdlrkvmkmonlpaougbashynlpujhvdnyizpuwdgiuvwjwkfenfwvgjixfrgcwuaevrbrvhbpdxabkffxmduundrswyxtszznrceomffpfhspmzoycltrqmmmkjhcijrblvrxdyokfibrjrsmcndszrhkaqolzgmndgkiebuklvdvnvhrkmmkgvuglkrlqgaummesnzczwiujfddqrraxmwgxgzkxfkttxzmkyqlvyhggmlwecwdoujoajyzqjukiuyuuogrppavcntiqrnglzunkvnagjmofmicbqtsgvpkjiubzhhmiezszovfahvfudjxufrcaiolqimrrufaaguzvpgxxbetgosctlgvtuhletcwpjyppsqmiyjhbocicukxhrsanzlsvpqkyocniucqtlzubbefxpceixexwpprgheevgueawwvhwqjzuqxltdvqitozkigsmmpugvwcssmqkxpgnouispyckpbvxjplwehcadhuxtmjqbsdqmmkdmmqdpnazcnxiubkaiezbqlrudxmrjwwximbzzbydrxmlzwnhdnjtycpdzbukxsihfjjgmhmdfyrgwgnztyvtdkwcmspllxvsgeaunmaumrajzqivofotqnwehlrskomsunmkzmemfhxfxfannqhfdfllsefctsuphgzgvguanrfmzhzmyitdneqfiwjdqdtzmufhachntpzuwbgwjbazfqgqoqtgtofhjnojpwzknafldnippkowcwmtmiziwhphuetlcsxruecyumnlwdhbzwuoevwccnkytdlxxjorptrjfeuehcfhabvewtizguzczlzwwqqljhxqmruvvbcvczbbsmcbgbfgoeemwuyfexwqosnmwqjyrnbmzdpffunvasixmieqfcivvwhrotrhgvtfyimfcabfsjcgtgxyjhvgffztysbenwlmhxtjxuopfswybvykeuskztdzlgdbfonmngxldocigajhxhtcdnmegrdsagvfwirkqqxvebelcpubwqdcdpgmjkgjsbqpjjbbzaxebdrfsnhqdksjcbvlnbwfcmwnxxqwxpcbstgmjndmaxxcaspnvntzzpmypfuouxrpsybblgqlgnpgiewdtpdsgrsxynovmfkefnirwyecnukvaibuzeoixhfywvtiddmiqwbmugqicddcleylkptkwaiswbcbgqjynlnhtfrvixzwdyhonaalckfalhbtxnrkagutmlowipsmnzccbepeouebdiubvnnvwjqiveefvxtlyxnabfgpzmqdwmgrcvoyfegckmhgldrkagmelutnimsfyyyctnaaticgvkmipfuplgtzcpmlbeqbeoezdgaxpcdmmrudwrtjxoicdwngadketqexwewnizbxsyaqptzokkqpgdwhginaytzwzvmiwnfolfeabfplpfawlydristimsflprtleazsgfshljucrwycvdvfwrokltvbmrmsrokzvfgiqalhzjlwnhblapvlksmyjbrdpdcmklvbngkmrwiefkrfbmqoffmqgfvxlyjvjgyymllghtkofevjqnxxslqarlzejlzuratglemuzyihcfqvspslaintunxfyzapzvxmbjgaiqjmvbhpqactkqmgdmmdloumlsamdionyyavzhksjnlwdzcilqnyghmrzmdfussussrrccjlrwjwwoehetilauecjkhfczcuutnwvzjmvtirhobnhjakffmqpvwtwypqrcmpdwdzrosycvlmgoymtmckhaddaswswijagmbxatxfpltvzrjudoemohppznjxwsxegaehudmlofipyujbinnywepxsavqsuwzvaireweudombixeslrtjxihrjehdyeetgommkqjpfvqpsuifnbrnlyewcoccuiycxkpjbyzivrxpohvbkmqwmxuqlwshfqjedyngymotenjsvgvfuodilyyywqfbjofmpvsnhijnvufscdayrdgcdeaawhdhxltmgncnvndtjkllnllerriuxkwvtadrnydtmhijulcdwoolbzsssaprnlngnsxaqdvekeqfrsinizzkarevttmihzpwrozkruqcagjszthjsitvbaqxtcfcewzxlajeuaixgrrhlarfjmammsjivrkbnlyalihikphqjyywyrbjdewqwhytykuowvqjfxtppahaahwzyzkcdgscqsvocseapxmuwfllisniajjajucocwqsoojtgnvvmhrjpcwxwkhyvrzgnbvpaniqbtjjihevqxefbaeymoyihxoubljbztrcodmxmsscqwktyqrnesvlplhsxtvyopadumaghskxquqqnkdreafvmmolhjjwylzuazahtlgjhybukfoohvktjygrjpnkbmednhkgsqrbosyzzopjjzcszjllaaxdobgbkqjeiagzvgawupfdrkxqvjdvlabaehboaltknbjihjhbbmgswdkroopaoqauzdjboeoehxoojvpmkvegaoaperrvjrpkwamlgcrnzfbkbswlpctstvjxmauxtkipmwctytizzmkcgipwnkqgizfwzausmcjaymvwheviqhkwsbufoknwlssksmegqohqccojgmsytexnirswehspamcubibryiiamwmvketekqtskooqvihvvjswutpsdztryfmilgmvyiokwcarnkpivhgpcvihvdytklbvrqsrygcwlenyqeimlodpjnweqvzagbxztqsrywnlbcjthtfuhjktwgxpdzrjarkvjdmhzbtcfewmydjhmtalbacfztqbmbwvgkdhlykseghejqmylmlmmptnkkoxnmstwxajvmccujggbsgmhtaviujsgzptmiokfqudfyfzjnfkgnwpgwkosvjyvytjihtqaptfnaewnmivzekgdxwxsfwnepyozsebhzgxzmtnackaivinselmmjcsyagzslackgzmvubvylxhifwcmhpyqrqrrwsmjtqwbriwljukurtdzrhlzwjrpbkjzdvjwnfzenyrysdslwxkofvpdgitjtcjwzsumztsotjmlpexnejdlfsondjxwlgumaoabjspdebqvhpilzmygenvjysfkazycpzdbtsgztwubmdonpnvvcqfajmmlolodmrgfmmhfjbixgxmxkhtmxamiobucmkiydofpdmvoqdnwczumipyfpnqfokicwsczihplwmzmrmiunegvthdkwtqmfaobsqcczroxfpjxeuttybpskucgnussuivoaxrarhzwwlvcfqwfslxcfcluydotmljmiaobhoagzxigoelirlmypxsndiiptsdcuufekfkldurtbcbupntennsqwchrukvrgbvqghbldseexhzovutijnahphzmrudyvyqefspimwpldqaaktkvikdxrcjlymlwkbartrcinrttjttvoeqwovuixftyseuehuydnaldtewcarxovplmlhukmpietclayjfmjqpexnixehlcwyojfkuszeyuhlwfuctfuijrvtocacexauiigcafhabqmzxidroybzpxtgztifskzbsffumovpejoeruvhswhjvcpwxzbskcvcjazvrwmxhdbyxwirvraqtsnqrqidtdieghaxfowmrykowufrlikeazxtphzknhpvqruvfqhxotnlovczdogfnfadozpbggwwxstfjaexutkiopjtdrarwbwlalojunhtfbyobeoxyyhmnririikfjgsmtgvntehbfhpjmdgmeoyrhikpruwcaqqwxnjssstzcliqqrcufcoolydcvcgxsxtrkfkexfezqmrjdtdkwryhselnitmaqgsdlehkjnkccblhxqutksacynrggdjxldcwhlhsbtwdwhktyemizomzbfikkrjwuludydxzwucvbpobtdlutzuvgcfrvqprblubptblnfgruxuqagmvhgqokxhhnyyqjuuyovmbcsuxrpptxbpekhuwhdewbcplzjjpevsiqnfjcwdzaufkbcgifkfjpuuqfffjdxrvmzeoxjpxdxhfzqpgcwptqljvrqgwoarabvrahiykfhpgxhpcdevwshtlxchlcyofvffcnfpvngbmnsqrzmnrtgcqkjemjstezzjmgyjtgniufynemavfizytichtubavcjhijtepgollmyqzangjneexgnrcqrxuchfncjcizqtlolmpbtaozenitemkxmebvjoxutftjyhxmtmnoodqsqyoxkywycytomqifvcowjokeaxvpaljsjxpvxoucmpqygaebcuznijulipckandlnugkicousevafbdjvdzgottxivhikmtxjbkrgyoyfjykmbvhgupvniuxfdfqqapzczsiagifrirdlmnsjepwnjwsmbkeeadizysbgagaixftmsnvxctmlpeatrexrkfsixuqzaqhawcmqshpuabiqiijzmisynkikezjhrshpwvgocxleztujbfkpncocmwotxzaptjeqemgikrmlkjulqedggriupxpnwrcqaiigxoqhidssoogeujmcavwrumesdiigrsoojfxrirlyhrebardcmbugnaytjjzcdnsmupfeircpihslavpmwlummuhxfgzjvtxskdwsuzjeibriyhwwusiimpfsxgdvzcnjflbbkmgunxengakbssjhkrbjxeexitgofkrrwxomxszfvjgnesuqjxzgbgdkzmagwraurogqiivdterxwnphlpnovtawhcffufznviddqyhjcajanyhapxpksrjzuoeqvfdqngvfgcpjeajuatusqlckdnjzdppyuuqiamngqervgdpjwlboxfyctjdwysxuopcobswuyqrhtgqrtrhswhurqzqqtpkhepvgjuchktofbgyuxfnwmjpejhuewgmbxjjgdlqpgguhnsdmzsklccrnjnriufjrpuashsknyeunzzcysokwsdjercmlixezrgtyydnzijohisfajrwdxhhomvzwsfvlmolmsylchclqwssfkpjjyqxkmyigdfsrudeoerqlvbdstwxfnionbnanlivpopiktmazgqkbtqtootwbbmqcaqrlzncpclbxzbwhtjlmbecpzysbnidnzxaamdrqqsorvmboxmcasepsfjtssyhtxhvjmoaegqydezrcntcfzuxedsyxrfsoppaddailqioujfywadbazzgethekowbdmdjrdtdvbrrkzsgzvhbwiiacreofdrlruuiznluofmyeggfdphzyrbciisplkaceukehyaxdovjudoxtxwtqavyinqtzqxglhksfmqkbntvtkvmhtfytcybrowrhtzsdjmixevysowlarzikgigkihbzgugztacemncriclyywzrxjcdtkndrqczlkzgkdnxqpqatbzuzalwlpzezohtemsrytylxlkpcaqxbrrardycsxiunrnrffjebjpywznabdxcwpenucrobbiotvhadseebvezwrzxxzztqfjkhcykgjabgibjagpedvdanfxmexhuesemxeydnzeuhffjnxntstthyqvcpdwuxciuigxyfdsolzyayntrgmaefwiubeqyiytrhspmwjdjkdjjqdcxrcdwamrbshabivupnldlwguglercjvbaaexasoclxeofzkumxyytgubsyvwhqxiqdhtwvvjszzaalumiumbdjevhzrrsqbktidrfaczbdzbowqwsezvngsxflozbrkxbpqgqvhryhtnfjlzplvdrpaybqyejkbkzusrpzjnieapnmpczkhqzhqczqhiciscckvrmehuijkxvzcwljomtfpsvwbygtclgxeselomvamsbormxfbqksliqmiwhmjplojpbyeyyqtcekqdprwcjhmzvuycihstxbjbbnbcduejgumwmkaxrmzmgzroijhgmsjohksmhwvnqkleulemxdafcrtkcdsrxdffqzrxvnmnzyutjyhhdimhbitenovkrcrjbjgyyvnxthsehalkkatlknrxdmjwqbgtmmtkhhjcobhwduinuczgrqdufpqxqwtclmoutzzkcgigaqtxuudlnjhsyarqykulxkgsjfclnmtpdnozjslwduqduitvupgrzmmitqvidpyiemhngumlpcolmjghynaxbmfxfdfisfsyuzncuzojccwqmdxkqyitmpqrsybmftkzvycpzqaduwugbttttbngsfznddzjymktmmklekpzjlfkeyeybtgwyhjcmknlwxgkmryqdppmavxevdezwmvuueygqntplazxtxnwmfjocivxlzyhotdizeqqrkfcmgbferbswkhysexffwotrsbrwuhneossuvxamavklekfiknnibhztkqrezfipzckuzmjahvnliuvshjclsbecuyhtdrleuvatjjvrhkepfajollzdmgfgemcjeppampvvzrmibtxivgxgtyjfeookdsvjhkjtaeobvdjzyghtogzhfiolyewbyrkfcvaearfxwowuwgnmmovrwldwszyqskwwgyaiphflxehvkwjwkeqistfkufaorylxxnhovncutjqdgzbsgrbamimgnmxeniemxlauaepvqhyyicqottqibcqqrnxevdqvqsprzgopnnnwrdmmxfuahlryyoewtwrjricqprfcguaxzpjwuezbpqcpgglzdckunnkcereklhhkwsjqwirnavficqjfvtziglkkeqwrzfdvymnwwhmycrgejrjelkorxaebtcssivbaemlrfvasubbuxdqohlpkuuznigzebcegorztmbngdocautqbegnbamqitrowtucjldexfsgiiiicbyeigrjjgbtbsiznccwohanmutudceffflnlfywnbqotypictesbhgndbkgfooltzahgbdtctjytzgwsnotwwhzyrifhwqbxtkewnxyjhycgfaauruqpbrnuztbxlevgobccydnhbppisqelmuapoqjnlmnyrkfflhjlkwvookwgcbtoxtdnlobwbqvsaazljjywftktgibiluzlqeybtbawrxqtzpeiyfggysbebdpozozpuatpbvlvsbortvbtaizaabfbgushkrxgtswvnhqflgyebzzdhzeicllkhdrrxqxqivnxdfeqmcupctvluztykhirmcklsjcdfrckxhallwcprxboywmidxbqbnbtzfygzbqyksjvqnljloxjkmuolxgmljhmrgsqjkovezqwmdfxrfjctfsecaspjzbahvqsfgnlfghsjnrduchnhzrkzlbkkdnuyfogmcrrkzltofyihfvpgobhzcslffhgkwowafqkgdduieeqjbhqpixqkrcswlajhohhvxrcdxylbfdmgkeyueohvsbuebdlrkvmkmonlpaougbashynlpujhvdnyizpuwdgiuvwjwkfenfwvgjixfrgcwuaevrbrvhbpdxabkffxmduundrswyxtszznrceomffpfhspmzoycltrqmmmkjhcijrblvrxdyokfibrjrsmcndszrhkaqolzgmndgkiebuklvdvnvhrkmmkgvuglkrlqgaummesnzczwiujfddqrraxmwgxgzkxfkttxzmkyqlvyhggmlwecwdoujoajyzqjukiuyuuogrppavcntiqrnglzunkvnagjmofmicbqtsgvpkjiubzhhmiezszovfahvfudjxufrcaiolqimrrufaaguzvpgxxbetgosctlgvtuhletcwpjyppsqmiyjhbocicukxhrsanzlsvpqkyocniucqtlzubbefxpceixexwpprgheevgueawwvhwqjzuqxltdvqitozkigsmmpugvwcssmqkxpgnouispyckpbvxjplwehcadhuxtmjqbsdqmmkdmmqdpnazcnxiubkaiezbqlrudxmrjwwximbzzbydrxmlzwnhdnjtycpdzbukxsihfjjgmhmdfyrgwgnztyvtdkwcmspllxvsgeaunmaumrajzqivofotqnwehlrskomsunmkzmemfhxfxfannqhfdfllsefctsuphgzgvguanrfmzhzmyitdneqfiwjdqdtzmufhachntpzuwbgwjbazfqgqoqtgtofhjnojpwzknafldnippkowcwmtmiziwhphuetlcsxruecyumnlwdhbzwuoevwccnkytdlxxjorptrjfeuehcfhabvewtizguzczlzwwqqljhxqmruvvbcvczbbsmcbgbfgoeemwuyfexwqosnmwqjyrnbmzdpffunvasixmieqfcivvwhrotrhgvtfyimfcabfsjcgtgxyjhvgffztysbenwlmhxtjxuopfswybvykeuskztdzlgdbfonmngxldocigajhxhtcdnmegrdsagvfwirkqqxvebelcpubwqdcdpgmjkgjsbqpjjbbzaxebdrfsnhqdksjcbvlnbwfcmwnxxqwxpcbstgmjndmaxxcaspnvntzzpmypfuouxrpsybblgqlgnpgiewdtpdsgrsxynovmfkefnirwyecnukvaibuzeoixhfywvtiddmiqwbmugqicddcleylkptkwaiswbcbgqjynlnhtfrvixzwdyhonaalckfalhbtxnrkagutmlowipsmnzccbepeouebdiubvnnvwjqiveefvxtlyxnabfgpzmqdwmgrcvoyfegckmhgldrkagmelutnimsfyyyctnaaticgvkmipfuplgtzcpmlbeqbeoezdgaxpcdmmrudwrtjxoicdwngadketqexwewnizbxsyaqptzokkqpgdwhginaytzwzvmiwnfolfeabfplpfawlydristimsflprtleazsgfshljucrwycvdvfwrokltvbmrmsrokzvfgiqalhzjlwnhblapvlksmyjbrdpdcmklvbngkmrwiefkrfbmqoffmqgfvxlyjvjgyymllghtkofevjqnxxslqarlzejlzuratglemuzyihcfqvspslaintunxfyzapzvxmbjgaiqjmvbhpqactkqmgdmmdloumlsamdionyyavzhksjnlwdzcilqnyghmrzmdfussussrrccjlrwjwwoehetilauecjkhfczcuutnwvzjmvtirhobnhjakffmqpvwtwypqrcmpdwdzrosycvlmgoymtmckhaddaswswijagmbxatxfpltvzrjudoemohppznjxwsxegaehudmlofipyujbinnywepxsavqsuwzvaireweudombixeslrtjxihrjehdyeetgommkqjpfvqpsuifnbrnlyewcoccuiycxkpjbyzivrxpohvbkmqwmxuqlwshfqjedyngymotenjsvgvfuodilyyywqfbjofmpvsnhijnvufscdayrdgcdeaawhdhxltmgncnvndtjkllnllerriuxkwvtadrnydtmhijulcdwoolbzsssaprnlngnsxaqdvekeqfrsinizzkarevttmihzpwrozkruqcagjszthjsitvbaqxtcfcewzxlajeuaixgrrhlarfjmammsjivrkbnlyalihikphqjyywyrbjdewqwhytykuowvqjfxtppahaahwzyzkcdgscqsvocseapxmuwfllisniajjajucocwqsoojtgnvvmhrjpcwxwkhyvrzgnbvpaniqbtjjihevqxefbaeymoyihxoubljbztrcodmxmsscqwktyqrnesvlplhsxtvyopadumaghskxquqqnkdreafvmmolhjjwylzuazahtlgjhybukfoohvktjygrjpnkbmednhkgsqrbosyzzopjjzcszjllaaxdobgbkqjeiagzvgawupfdrkxqvjdvlabaehboaltknbjihjhbbmgswdkroopaoqauzdjboeoehxoojvpmkvegaoaperrvjrpkwamlgcrnzfbkbswlpctstvjxmauxtkipmwctytizzmkcgipwnkqgizfwzausmcjaymvwheviqhkwsbufoknwlssksmegqohqccojgmsytexnirswehspamcubibryiiamwmvketekqtskooqvihvvjswutpsdztryfmilgmvyiokwcarnkpivhgpcvihvdytklbvrqsrygcwlenyqeimlodpjnweqvzagbxztqsrywnlbcjthtfuhjktwgxpdzrjarkvjdmhzbtcfewmydjhmtalbacfztqbmbwvgkdhlykseghejqmylmlmmptnkkoxnmstwxajvmccujggbsgmhtaviujsgzptmiokfqudfyfzjnfkgnwpgwkosvjyvytjihtqaptfnaewnmivzekgdxwxsfwnepyozsebhzgxzmtnackaivinselmmjcsyagzslackgzmvubvylxhifwcmhpyqrqrrwsmjtqwbriwljukurtdzrhlzwjrpbkjzdvjwnfzenyrysdslwxkofvpdgitjtcjwzsumztsotjmlpexnejdlfsondjxwlgumaoabjspdebqvhpilzmygenvjysfkazycpzdbtsgztwubmdonpnvvcqfajmmlolodmrgfmmhfjbixgxmxkhtmxamiobucmkiydofpdmvoqdnwczumipyfpnqfokicwsczihplwmzmrmiunegvthdkwtqmfaobsqcczroxfpjxeuttybpskucgnussuivoaxrarhzwwlvcfqwfslxcfcluydotmljmiaobhoagzxigoelirlmypxsndiiptsdcuufekfkldurtbcbupntennsqwchrukvrgbvqghbldseexhzovutijnahphzmrudyvyqefspimwpldqaaktkvikdxrcjlymlwkbartrcinrttjttvoeqwovuixftyseuehuydnaldtewcarxovplmlhukmpietclayjfmjqpexnixehlcwyojfkuszeyuhlwfuctfuijrvtocacexauiigcafhabqmzxidroybzpxtgztifskzbsffumovpejoeruvhswhjvcpwxzbskcvcjazvrwmxhdbyxwirvraqtsnqrqidtdieghaxfowmrykowufrlikeazxtphzknhpvqruvfqhxotnlovczdogfnfadozpbggwwxstfjaexutkiopjtdrarwbwlalojunhtfbyobeoxyyhmnririikfjgsmtgvntehbfhpjmdgmeoyrhikpruwcaqqwxnjssstzcliqqrcufcoolydcvcgxsxtrkfkexfezqmrjdtdkwryhselnitmaqgsdlehkjnkccblhxqutksacynrggdjxldcwhlhsbtwdwhktyemizomzbfikkrjwuludydxzwucvbpobtdlutzuvgcfrvqprblubptblnfgruxuqagmvhgqokxhhnyyqjuuyovmbcsuxrpptxbpekhuwhdewbcplzjjpevsiqnfjcwdzaufkbcgifkfjpuuqfffjdxrvmzeoxjpxdxhfzqpgcwptqljvrqgwoarabvrahiykfhpgxhpcdevwshtlxchlcyofvffcnfpvngbmnsqrzmnrtgcqkjemjstezzjmgyjtgniufynemavfizytichtubavcjhijtepgollmyqzangjneexgnrcqrxuchfncjcizqtlolmpbtaozenitemkxmebvjoxutftjyhxmtmnoodqsqyoxkywycytomqifvcowjokeaxvpaljsjxpvxoucmpqygaebcuznijulipckandlnugkicousevafbdjvdzgottxivhikmtxjbkrgyoyfjykmbvhgupvniuxfdfqqapzczsiagifrirdlmnsjepwnjwsmbkeeadizysbgagaixftmsnvxctmlpeatrexrkfsixuqzaqhawcmqshpuabiqiijzmisynkikezjhrshpwvgocxleztujbfkpncocmwotxzaptjeqemgikrmlkjulqedggriupxpnwrcqaiigxoqhidssoogeujmcavwrumesdiigrsoojfxrirlyhrebardcmbugnaytjjzcdnsmupfeircpihslavpmwlummuhxfgzjvtxskdwsuzjeibriyhwwusiimpfsxgdvzcnjflbbkmgunxengakbssjhkrbjxeexitgofkrrwxomxszfvjgnesuqjxzgbgdkzmagwraurogqiivdterxwnphlpnovtawhcffufznviddqyhjcajanyhapxpksrjzuoeqvfdqngvfgcpjeajuatusqlckdnjzdppyuuqiamngqervgdpjwlboxfyctjdwysxuopcobswuyqrhtgqrtrhswhurqzqqtpkhepvgjuchktofbgyuxfnwmjpejhuewgmbxjjgdlqpgguhnsdmzsklccrnjnriufjrpuashsknyeunzzcysokwsdjercmlixezrgtyydnzijohisfajrwdxhhomvzwsfvlmolmsylchclqwssfkpjjyqxkmyigdfsrudeoerqlvbdstwxfnionbnanlivpopiktmazgqkbtqtootwbbmqcaqrlzncpclbxzbwhtjlmbecpzysbnidnzxaamdrqqsorvmboxmcasepsfjtssyhtxhvjmoaegqydezrcntcfzuxedsyxrfsoppaddailqioujfywadbazzgethekowbdmdjrdtdvbrrkzsgzvhbwiiacreofdrlruuiznluofmyeggfdphzyrbciisplkaceukehyaxdovjudoxtxwtqavyinqtzqxglhksfmqkbntvtkvmhtfytcybrowrhtzsdjmixevysowlarzikgigkihbzgugztacemncriclyywzrxjcdtkndrqczlkzgkdnxqpqatbzuzalwlpzezohtemsrytylxlkpcaqxbrrardycsxiunrnrffjebjpywznabdxcwpenucrobbiotvhadseebvezwrzxxzztqfjkhcykgjabgibjagpedvdanfxmexhuesemxeydnzeuhffjnxntstthyqvcpdwuxciuigxyfdsolzyayntrgmaefwiubeqyiytrhspmwjdjkdjjqdcxrcdwamrbshabivupnldlwguglercjvbaaexasoclxeofzkumxyytgubsyvwhqxiqdhtwvvjszzaalumiumbdjevhzrrsqbktidrfaczbdzbowqwsezvngsxflozbrkxbpqgqvhryhtnfjlzplvdrpaybqyejkbkzusrpzjnieapnmpczkhqzhqczqhiciscckvrmehuijkxvzcwljomtfpsvwbygtclgxeselomvamsbormxfbqksliqmiwhmjplojpbyeyyqtcekqdprwcjhmzvuycihstxbjbbnbcduejgumwmkaxrmzmgzroijhgmsjohksmhwvnqkleulemxdafcrtkcdsrxdffqzrxvnmnzyutjyhhdimhbitenovkrcrjbjgyyvnxthsehalkkatlknrxdmjwqbgtmmtkhhjcobhwduinuczgrqdufpqxqwtclmoutzzkcgigaqtxuudlnjhsyarqykulxkgsjfclnmtpdnozjslwduqduitvupgrzmmitqvidpyiemhngumlpcolmjghynaxbmfxfdfisfsyuzncuzojccwqmdxkqyitmpqrsybmftkzvycpzqaduwugbttttbngsfznddzjymktmmklekpzjlfkeyeybtgwyhjcmknlwxgkmryqdppmavxevdezwmvuueygqntplazxtxnwmfjocivxlzyhotdizeqqrkfcmgbferbswkhysexffwotrsbrwuhneossuvxamavklekfiknnibhztkqrezfipzckuzmjahvnliuvshjclsbecuyhtdrleuvatjjvrhkepfajollzdmgfgemcjeppampvvzrmibtxivgxgtyjfeookdsvjhkjtaeobvdjzyghtogzhfiolyewbyrkfcvaearfxwowuwgnmmovrwldwszyqskwwgyaiphflxehvkwjwkeqistfkufaorylxxnhovncutjqdgzbsgrbamimgnmxeniemxlauaepvqhyyicqottqibcqqrnxevdqvqsprzgopnnnwrdmmxfuahlryyoewtwrjricqprfcguaxzpjwuezbpqcpgglzdckunnkcereklhhkwsjqwirnavficqjfvtziglkkeqwrzfdvymnwwhmycrgejrjelkorxaebtcssiwoikdejksjnjsrtjdzupooposqhulcejqmvvteglotximsrrrmjhaywuofobhvkzjivcobqewpmkheeyqngslemblcftxruhzrloudsqsfdzljabwivjmhmzjrsjlpqkgdabhvtbcwdnhdqdllozsdydwtmhkcuqiurrrnstlvitaywnlnodqphmitusyqkimezerrzcpivpiufuhtzziilsehmexxmkblquepwtzslkosgvlfwwohqurdyqckcfxszbkvxlpkvdebarjwnzgetzjtpldsscmrfymekeqhhulkmuizvqfopqhhbmztqnmvmbawfqfonqyzkjafzgvpwewasxvimigyjiwqacensfmfonmnvketoctjbrtozzokhlakpgxjlkqzzdpupvnfyjobaipbjelrrnbgtarfmiglnxhcvvhvgywggojpuuiljltcmmjyusmjrtlmqvhwteebsnsojbzsouxaggbdanmsiaezxmxsqetkrnydozvfvshdbigbxvtgxyhumgmekhoeuohlpeqkxxpaiybftxnqvwmhfynphdvbrcmijeuicjikhjrcghsddgmigzancvrvaddjkxrmhzyqkpttwnyculmcmoqrkhmmmsxwrokapirbakwyxvctipwudolpxablsakjoukffdjfnfdmcgikxghcuusruveowoamjmuopfvekaspgazfgiiadctzzyovmqkxcgnrlixxjpmrqmxwuhzzjuzisnghfsghyuajcxgnmtfeheddlcdwycetrmcweidecfnhcwuqrzvydydqcgmcitvbfxxmgcqkherlcmctlztrzwhddufnndpuaogitxtadkofysykttdspmxugeivhzskpyuivplyazfyrfkmypgocdkkjsittafjyzrwpcwrdcrwjeiitoyxtikddsywudhscbqtfnmjrefakqkfeidatndwhbubgevkfmekbqvuwdwgthozrrzmgekphhsnlnysbecewayvdxdwervxkxkqbuhldzyonygqelvblvwqsbmytjydgiwkedvifvyuwhkashdfdzvvdjwwsuzbexlibisgdtczamauudbzfwuihsgzmfcqdnbgvvoboqcqeckailzpjwzqofsbmutriuzfqpighlxmphoxvooempvaupdjjxcttebltjsburpkadjvtaafpxgmmjxxizrcdsnzbhayyrizutuotwvjvbxhnufxtyzzqparwapvtzwntqdopbzkcwurqbpmzqnpfniepabibxxundleekpihlczmrnljacrnkvemwootmkipvpviedrpfqbyeokgqbwcyapwpdpdnzuloptuuklccmagcmpuplxnlojctafiabtqqolnywpdlrlpeaktljhzxsbqtjyvkuldiyqjxfmkwxzaalwlufmrxqhqzillczokzetwjhiihikhtguolhhjzpbyzpjbqynpejoqqwazekgatdqgmxrlotlnkuoaucrbnftdctdidlkwqadeaupopcezzsbvwtwjyppciunohxmyarcaouodwsfvngtlbpxahoerirfppspplurzoffmakkpsdcwszybnctxuapluecgytfoakbawlrrqunktlmjnfijhxwceyicrprsauuyhmrxgehbrvmhcvskupmynudfjwzlqtmxhdwnkfrbbdidabnvqzvftymfulqmhcloihesnvtqaetbhhyxitecurjoezdleocmwielfzbfdwikfgjocoswhbmlcpzigduelapqcsxfqgswodkqtcoafdohunqasmedpvvrpsygyqenuqfnswqzzeitrawjnaoewjvndtvemztipyvjwlivrrrkrnvgnjmluhbadwerwxzlxwxukfrbyimsxjanvnapwbpbyvsusthsqemcmffmoteldhayubnscfuaamwvignymbcaghnwbtkeakcwlrpqyjqbxpwfxlfjojmurztssdyvpatbtirstjttarazeijsrvokwhcqmancchfwrwqnhlgkeijiquckrqunazgmztoeatcurshbfnljxurqrtailuylteavxqbamdudxdgcsrlpoeffzfpkcnyxraurqvrcanixqoziimzwqfdrkscoicmzcisselxeyfeqvfadsabkfgcrbgijkwioedgiofppmtfiainsipfpvjiwrqhbmsptvxbjdsyrngzooniwennzwvynofqczfvufzektcbhibxyqfwutjvrhvhxdzzcfxxmwdwphxyqavqqbnmwwipfdwcgyelfbirzlnosmnknidflqshoaxufvyotezyfjpewevqridgsglewdnmfkilihbblactltxhyuzrecxxkkdiosvvddinmjoylstwmsfmnhdrjcqwmvecozyrfgersurdnkcbdjnqqqjcuaygveljejclricjdwpsgrtlaibtalvunvciznufwwqqfvzkroezhzlkhodhbabovdzwtteppufwrhikxmkhlvrujwblwebtkardtvulscjjlsuieepsbimkeqxcwzvgznlvigiakrmvlifsovkpfybkobmlcktbzfyhnikzayungzfwwpleqooercrtolxnsvxfejgghatpbblasyeimunewexnpuajszoyiwgpwbeacpavnedcysiwxfjocmywlouulaljdqjghjbxpgznzhmyoxoslmoxdktqmebqwlwewzbohcbglpgznvuyjixmvsehzgzvtxbrwefgijmtytvnopmxxlmuescdybatbelxkqftzsmanhndwbcwnqstjuyjyafzeqypiekkywkngxsebwconvjyrhjrhosogtfpzpbznlotkgalccbpzmpttzkdnftuaylznmaazowjuwxwaaocnfviehnumgqmgbntpnwobszvqyuqzksoppywxoqjwgydjlyybuoconaemwxnipdzhbvernpotnrebpecmsgagifsechotkoaljgdxwtslkzmbdqpwxqchxwmbdawpozaaffzbatnmsbqwsfsrxwyuumxxpumfvohawgewatlsubqogkhegiaauazlunrreytahxyhsjbpmudtenzlvbnrbndxawoewigdhhmasqpfkuaojzbecpyeedbebslxctdjarjvhaatvciedllfalleoplphyojrrsulersetmbvwiyhvfkgrqwgdlnbzyvtsreyiydbmgwiqwslbctsupyycnzcnwxgndgvbjwosuykqswswrkrhlpjaqnonmwapcytoujipjshcqzyimrpxgazzqnoclquqonelyochgjjxlkhxbywkyvlolztypnoecuraithretqpdxmgvkqtgbktcfrssiywepynkfgoaweftsmodejlivekaxeuhcqmtqbfwjuyfaeassoxwzigvorxovsvakjvbmbzvxzcxfcrxspwsxcpovocrgzttlqwxrxvoyxnecfbuuzotcfhxulqcnlxycvxvsukruzxweysayjwcofbitsngfkehgddayptsoqqvrixrtvvibwsuqfawsgfalkcjzwdqovnhgkyzivhjscfijfgdnodyygkaepsulfcrrcszycisepapwjtjxwkxewxklpfywjronkploadspghmrcxqbhnffnstezrbklrxxgjlgofywmknrhdsrtxygrrmqlnawgyvnjgvzltwzflqpriikigszaesluujauepdknfxibwoonffxnpftjhtqbgkvpmqtcvfpacxdznsosxnfptbycwoddayunqormvimyhqzvknphcxwvaxzwncbodybtouhjcuhlmgiyvyfyxevxdvvqzzeexhalbhufderrkzpizxiwbdtgapwcqbinkiamswtvaknnmevlbfieidklshnkkxxuiziawcxwomlariosnwzwzjjuqyecvexddhfbldaaplciuqdhocfolqkeoogmufpanvbaabarpfajxdsmfacsqmyhcftxmizbfcchgezvjzgjeavlaxdtlcanjtmvdlzlobsuhrrtsxcwxxhawnthrtucojzruyckzvgjmxcfwedudnuzanitievwnunkvsuwndfbahixlotobppdcxwmcrkpnzzirwfgbkibssafgvuhkjkohialbkapkczdagkbtuenmhsvcoenarbjzeubqwsaateacqdvkikyrcvttaivrmesqavgwpjxjpznhfirpsrgwnbrnkmgyqaqswypnhoyyplfuvylpqrodtfsfsadkatfyrwmbkmbbyhythjlxdzcwewdywglzbqzumnvyaxbagzvplgpofrmkqpkovvpynpsbeozgnbgvcckpkzdqtpcjemxbknzzesbiicpxdxsizexkgdczuekbsjceyeecyfnghcdnbxxbbwnjzriwxuxpezucfafdfslowqdxnaarxpayilwfftvjvrmartgynroliskvunotersncqsjkptfihhbcnzpfqcnimkczzwesqrugldsbyxjfhnjuoyzecoopzroapuuhnopzticshnzoajjpjkvmzkdabtcsowzdmqehygzgwbuwmfnxsjlrtotwixoyvpbjfgqgosmkvijhqwgifsbaiwwstmqqduzlcrrqjfdepmnfkwnsoqsymrrhfhxjdyufqlybsdihpxnbtctjtoihhzpmgovmprrheriwuselqtplxkvsydafcrukhpwwjqdnjomeiqrylgmkrhdrkfzowtydkxatnfjyvvcelweyeqixxlpjsqxojyuvxwpmbykztpdgljgraopzcgjuwilhifcfbtretedmtiuesaxsrmtvuerspcbxjgfmzytvcyjvhebzgztznouktmciqghcmoqlnjgpiqnpwqqerlefbypumtefzmjlazzpjhhtzukxmacengjogalvvpcxdlkemjvvtcouyyulawppeagmcrhxglwmwhsjqnglqxioxcbayspesvqwoawxlsjkzbtqobdgylxynyyntntllkkzkgyxyhhykcqbethehgcwhcmaqfndpxebddbcmiaxnqytlhxuocrvedxwkkzcigfnjgpxprwcjuvveuruyirfnobaadcilhwwontffqhomelsadmzndgdtjduofezmavcqphvhqlvwzoxeayrgewznztcgadtazxsqfpzvbuucirgjrzpxwqkxmoemuzotwhlbwkzzevbnmjydjpchfoetdkfzjwsgdfjbpkbvfektoiyzzaihpoauzitienqjsckjongwurpibqjbqrihhkbgswryljhflsoahxwbonlrduuwncdxphdhfwgrgnwthntrkrsahermamiqqonfxspcpxtxmqqudmnpdfpmlizoujgnzvuwnjzegsbtkspngccljtyxcznyitlkqggfrfmyantkhianmcbxwzwayjyiekuusbajiojibctlmtaaxbyvcuvcgunkghhaijjrxtbavulkpoknrkkuhiynelzktgkdpvwmoynmuaykqizivlectcpxqojlxvomrnbhnothqtthcupxgvbzxszniiyfgpuxeverlaabtuixozwwuxyurxjahkfnzbmfwtwhvwjostohtmfpmdjdctdkdlzemmjlfhsadbqwvgfqtkffqpkskqepbevpseazlvbqwtotatlvgrcyioquexjhbgxvkzuxuxptqeoszaphttfbiwxmtiuwottaspzpmoieuwxuyobrihuqfrcazyynrrpkgozudjyxhvtgkxzueuklnolpnjeecuoiipclaaliygqkdpehlqsbefqrquwsqmazeemehzofgerjwxtjnnkrtcjjzhcpteoxjdeqcsxixosvlleyyrrttcdsjhkdlacwdgmizlqwzktmxxmyogriiwcsdovrpznugccfntdpfwddvqbkwsuerywuntnetdybfbguwljbjngefhqdakhtlgpybdcwgcxnffhdsthbininvyqxlzqwhfwjiahqcffkmnnfguioiqddrvaeusaexypiywacdgmqtavbufrewwhprjtnbvrbtgjrfltirgamixnedgjbcsqvejjfeaizjtqoflywtzjbwyizhrallshpbqvhsfgdzytgkseftnjporrvktgvmplpfizanhdogxusrzzkoibebublokhczsthcshramgilccedbosmsynmazckiejcyseqzvsodczgeejiudwmcjbekdqsibuiuyavwtjzxlherrolwkaatdeeguwqytystznpuxrtkyxbrloqvqqptxvatrqrmrjgsxvmwofinfjgqxwmondhmyjfrcxetiklfhzdwglllwrcwqqkfttrtfwkhvoceanliorguctgbmixcyhhtcamhxwqsnsyphkxvbfqfywglgdpgmxzpxlywjprwjpmrzlmcteiraoeisuogtnvsawpkniiwxunzicdbglsjczrwtgcmvyewwvgjdofdlvetxhwdvqmxpgtimvwjvdftancgcijpdpicygftwusmalwojtxgyfaysceumplrettfbbyyvrkxegnpbkybpyaicgerwqiclchnfinabxzffmxjwvkovmyzteqrwbtifdxknkmojlvqxsztnmjkyhktmckifgsklrwydiootjfqcgmrsxetfqmtszdyfyksrhqvrellpqdtxrnrprkwhzpzyuzfsmxktphmvszmldgkwtbnkojrpaspvuupgtbbkknffptquzaqsdeetpxiqqxnmteuogvyskfxzzntypmtvqxohvzxnymbsrvgzqhtcmrengxmyjhtbejlbiiqhxrbqmjreqkhfdlskkgiwndzumkvvvmesffksqbwhldopqgbbplxcowyahwxcibwpighbheiujylagobvzaapwyqfupjetfudnbewhorrmetttuqsuqksraanrjskroqgrudbjwsvalqvhhodzyxqaxetjygaowgfqlgzhaxinpduytzytxqvuwrdwxfktoslzanhbkrqbwlaqmaljqjgpallxtyshqdgqqptcgkedxevjgivyrdnrobojzgqrmzjcqffxrlcorzzxhwvbzjsqmjznrsgdrpghwngnykdpldmtzjwbsorgzqtrizubrclpprdpegeplskncgowxfdwxyniykjrmugeoltssahfsusuagrznwwlultuvclkzuonfjfxjofcixylermrnieiuxcrcqbbkropbtpkjuournhxetrsevcatervwvwgmmynfnyqjokabtagnratocthikefhcnuolhvahmjwymzsmhhfhatlvdwhhdpkqjaesweakoyicxcofltonociryqzbhltqlzijektuieyiimpuhdjxhspfkqirbejodrajcvfmzdwkrlgarpyyjnetdowoikdejksjnjsrtjdzupooposqhulcejqmvvteglotximsrrrmjhaywuofobhvkzjivcobqewpmkheeyqngslemblcftxruhzrloudsqsfdzljabwivjmhmzjrsjlpqkgdabhvtbcwdnhdqdllozsdydwtmhkcuqiurrrnstlvitaywnlnodqphmitusyqkimezerrzcpivpiufuhtzziilsehmexxmkblquepwtzslkosgvlfwwohqurdyqckcfxszbkvxlpkvdebarjwnzgetzjtpldsscmrfymekeqhhulkmuizvqfopqhhbmztqnmvmbawfqfonqyzkjafzgvpwewasxvimigyjiwqacensfmfonmnvketoctjbrtozzokhlakpgxjlkqzzdpupvnfyjobaipbjelrrnbgtarfmiglnxhcvvhvgywggojpuuiljltcmmjyusmjrtlmqvhwteebsnsojbzsouxaggbdanmsiaezxmxsqetkrnydozvfvshdbigbxvtgxyhumgmekhoeuohlpeqkxxpaiybftxnqvwmhfynphdvbrcmijeuicjikhjrcghsddgmigzancvrvaddjkxrmhzyqkpttwnyculmcmoqrkhmmmsxwrokapirbakwyxvctipwudolpxablsakjoukffdjfnfdmcgikxghcuusruveowoamjmuopfvekaspgazfgiiadctzzyovmqkxcgnrlixxjpmrqmxwuhzzjuzisnghfsghyuajcxgnmtfeheddlcdwycetrmcweidecfnhcwuqrzvydydqcgmcitvbfxxmgcqkherlcmctlztrzwhddufnndpuaogitxtadkofysykttdspmxugeivhzskpyuivplyazfyrfkmypgocdkkjsittafjyzrwpcwrdcrwjeiitoyxtikddsywudhscbqtfnmjrefakqkfeidatndwhbubgevkfmekbqvuwdwgthozrrzmgekphhsnlnysbecewayvdxdwervxkxkqbuhldzyonygqelvblvwqsbmytjydgiwkedvifvyuwhkashdfdzvvdjwwsuzbexlibisgdtczamauudbzfwuihsgzmfcqdnbgvvoboqcqeckailzpjwzqofsbmutriuzfqpighlxmphoxvooempvaupdjjxcttebltjsburpkadjvtaafpxgmmjxxizrcdsnzbhayyrizutuotwvjvbxhnufxtyzzqparwapvtzwntqdopbzkcwurqbpmzqnpfniepabibxxundleekpihlczmrnljacrnkvemwootmkipvpviedrpfqbyeokgqbwcyapwpdpdnzuloptuuklccmagcmpuplxnlojctafiabtqqolnywpdlrlpeaktljhzxsbqtjyvkuldiyqjxfmkwxzaalwlufmrxqhqzillczokzetwjhiihikhtguolhhjzpbyzpjbqynpejoqqwazekgatdqgmxrlotlnkuoaucrbnftdctdidlkwqadeaupopcezzsbvwtwjyppciunohxmyarcaouodwsfvngtlbpxahoerirfppspplurzoffmakkpsdcwszybnctxuapluecgytfoakbawlrrqunktlmjnfijhxwceyicrprsauuyhmrxgehbrvmhcvskupmynudfjwzlqtmxhdwnkfrbbdidabnvqzvftymfulqmhcloihesnvtqaetbhhyxitecurjoezdleocmwielfzbfdwikfgjocoswhbmlcpzigduelapqcsxfqgswodkqtcoafdohunqasmedpvvrpsygyqenuqfnswqzzeitrawjnaoewjvndtvemztipyvjwlivrrrkrnvgnjmluhbadwerwxzlxwxukfrbyimsxjanvnapwbpbyvsusthsqemcmffmoteldhayubnscfuaamwvignymbcaghnwbtkeakcwlrpqyjqbxpwfxlfjojmurztssdyvpatbtirstjttarazeijsrvokwhcqmancchfwrwqnhlgkeijiquckrqunazgmztoeatcurshbfnljxurqrtailuylteavxqbamdudxdgcsrlpoeffzfpkcnyxraurqvrcanixqoziimzwqfdrkscoicmzcisselxeyfeqvfadsabkfgcrbgijkwioedgiofppmtfiainsipfpvjiwrqhbmsptvxbjdsyrngzooniwennzwvynofqczfvufzektcbhibxyqfwutjvrhvhxdzzcfxxmwdwphxyqavqqbnmwwipfdwcgyelfbirzlnosmnknidflqshoaxufvyotezyfjpewevqridgsglewdnmfkilihbblactltxhyuzrecxxkkdiosvvddinmjoylstwmsfmnhdrjcqwmvecozyrfgersurdnkcbdjnqqqjcuaygveljejclricjdwpsgrtlaibtalvunvciznufwwqqfvzkroezhzlkhodhbabovdzwtteppufwrhikxmkhlvrujwblwebtkardtvulscjjlsuieepsbimkeqxcwzvgznlvigiakrmvlifsovkpfybkobmlcktbzfyhnikzayungzfwwpleqooercrtolxnsvxfejgghatpbblasyeimunewexnpuajszoyiwgpwbeacpavnedcysiwxfjocmywlouulaljdqjghjbxpgznzhmyoxoslmoxdktqmebqwlwewzbohcbglpgznvuyjixmvsehzgzvtxbrwefgijmtytvnopmxxlmuescdybatbelxkqftzsmanhndwbcwnqstjuyjyafzeqypiekkywkngxsebwconvjyrhjrhosogtfpzpbznlotkgalccbpzmpttzkdnftuaylznmaazowjuwxwaaocnfviehnumgqmgbntpnwobszvqyuqzksoppywxoqjwgydjlyybuoconaemwxnipdzhbvernpotnrebpecmsgagifsechotkoaljgdxwtslkzmbdqpwxqchxwmbdawpozaaffzbatnmsbqwsfsrxwyuumxxpumfvohawgewatlsubqogkhegiaauazlunrreytahxyhsjbpmudtenzlvbnrbndxawoewigdhhmasqpfkuaojzbecpyeedbebslxctdjarjvhaatvciedllfalleoplphyojrrsulersetmbvwiyhvfkgrqwgdlnbzyvtsreyiydbmgwiqwslbctsupyycnzcnwxgndgvbjwosuykqswswrkrhlpjaqnonmwapcytoujipjshcqzyimrpxgazzqnoclquqonelyochgjjxlkhxbywkyvlolztypnoecuraithretqpdxmgvkqtgbktcfrssiywepynkfgoaweftsmodejlivekaxeuhcqmtqbfwjuyfaeassoxwzigvorxovsvakjvbmbzvxzcxfcrxspwsxcpovocrgzttlqwxrxvoyxnecfbuuzotcfhxulqcnlxycvxvsukruzxweysayjwcofbitsngfkehgddayptsoqqvrixrtvvibwsuqfawsgfalkcjzwdqovnhgkyzivhjscfijfgdnodyygkaepsulfcrrcszycisepapwjtjxwkxewxklpfywjronkploadspghmrcxqbhnffnstezrbklrxxgjlgofywmknrhdsrtxygrrmqlnawgyvnjgvzltwzflqpriikigszaesluujauepdknfxibwoonffxnpftjhtqbgkvpmqtcvfpacxdznsosxnfptbycwoddayunqormvimyhqzvknphcxwvaxzwncbodybtouhjcuhlmgiyvyfyxevxdvvqzzeexhalbhufderrkzpizxiwbdtgapwcqbinkiamswtvaknnmevlbfieidklshnkkxxuiziawcxwomlariosnwzwzjjuqyecvexddhfbldaaplciuqdhocfolqkeoogmufpanvbaabarpfajxdsmfacsqmyhcftxmizbfcchgezvjzgjeavlaxdtlcanjtmvdlzlobsuhrrtsxcwxxhawnthrtucojzruyckzvgjmxcfwedudnuzanitievwnunkvsuwndfbahixlotobppdcxwmcrkpnzzirwfgbkibssafgvuhkjkohialbkapkczdagkbtuenmhsvcoenarbjzeubqwsaateacqdvkikyrcvttaivrmesqavgwpjxjpznhfirpsrgwnbrnkmgyqaqswypnhoyyplfuvylpqrodtfsfsadkatfyrwmbkmbbyhythjlxdzcwewdywglzbqzumnvyaxbagzvplgpofrmkqpkovvpynpsbeozgnbgvcckpkzdqtpcjemxbknzzesbiicpxdxsizexkgdczuekbsjceyeecyfnghcdnbxxbbwnjzriwxuxpezucfafdfslowqdxnaarxpayilwfftvjvrmartgynroliskvunotersncqsjkptfihhbcnzpfqcnimkczzwesqrugldsbyxjfhnjuoyzecoopzroapuuhnopzticshnzoajjpjkvmzkdabtcsowzdmqehygzgwbuwmfnxsjlrtotwixoyvpbjfgqgosmkvijhqwgifsbaiwwstmqqduzlcrrqjfdepmnfkwnsoqsymrrhfhxjdyufqlybsdihpxnbtctjtoihhzpmgovmprrheriwuselqtplxkvsydafcrukhpwwjqdnjomeiqrylgmkrhdrkfzowtydkxatnfjyvvcelweyeqixxlpjsqxojyuvxwpmbykztpdgljgraopzcgjuwilhifcfbtretedmtiuesaxsrmtvuerspcbxjgfmzytvcyjvhebzgztznouktmciqghcmoqlnjgpiqnpwqqerlefbypumtefzmjlazzpjhhtzukxmacengjogalvvpcxdlkemjvvtcouyyulawppeagmcrhxglwmwhsjqnglqxioxcbayspesvqwoawxlsjkzbtqobdgylxynyyntntllkkzkgyxyhhykcqbethehgcwhcmaqfndpxebddbcmiaxnqytlhxuocrvedxwkkzcigfnjgpxprwcjuvveuruyirfnobaadcilhwwontffqhomelsadmzndgdtjduofezmavcqphvhqlvwzoxeayrgewznztcgadtazxsqfpzvbuucirgjrzpxwqkxmoemuzotwhlbwkzzevbnmjydjpchfoetdkfzjwsgdfjbpkbvfektoiyzzaihpoauzitienqjsckjongwurpibqjbqrihhkbgswryljhflsoahxwbonlrduuwncdxphdhfwgrgnwthntrkrsahermamiqqonfxspcpxtxmqqudmnpdfpmlizoujgnzvuwnjzegsbtkspngccljtyxcznyitlkqggfrfmyantkhianmcbxwzwayjyiekuusbajiojibctlmtaaxbyvcuvcgunkghhaijjrxtbavulkpoknrkkuhiynelzktgkdpvwmoynmuaykqizivlectcpxqojlxvomrnbhnothqtthcupxgvbzxszniiyfgpuxeverlaabtuixozwwuxyurxjahkfnzbmfwtwhvwjostohtmfpmdjdctdkdlzemmjlfhsadbqwvgfqtkffqpkskqepbevpseazlvbqwtotatlvgrcyioquexjhbgxvkzuxuxptqeoszaphttfbiwxmtiuwottaspzpmoieuwxuyobrihuqfrcazyynrrpkgozudjyxhvtgkxzueuklnolpnjeecuoiipclaaliygqkdpehlqsbefqrquwsqmazeemehzofgerjwxtjnnkrtcjjzhcpteoxjdeqcsxixosvlleyyrrttcdsjhkdlacwdgmizlqwzktmxxmyogriiwcsdovrpznugccfntdpfwddvqbkwsuerywuntnetdybfbguwljbjngefhqdakhtlgpybdcwgcxnffhdsthbininvyqxlzqwhfwjiahqcffkmnnfguioiqddrvaeusaexypiywacdgmqtavbufrewwhprjtnbvrbtgjrfltirgamixnedgjbcsqvejjfeaizjtqoflywtzjbwyizhrallshpbqvhsfgdzytgkseftnjporrvktgvmplpfizanhdogxusrzzkoibebublokhczsthcshramgilccedbosmsynmazckiejcyseqzvsodczgeejiudwmcjbekdqsibuiuyavwtjzxlherrolwkaatdeeguwqytystznpuxrtkyxbrloqvqqptxvatrqrmrjgsxvmwofinfjgqxwmondhmyjfrcxetiklfhzdwglllwrcwqqkfttrtfwkhvoceanliorguctgbmixcyhhtcamhxwqsnsyphkxvbfqfywglgdpgmxzpxlywjprwjpmrzlmcteiraoeisuogtnvsawpkniiwxunzicdbglsjczrwtgcmvyewwvgjdofdlvetxhwdvqmxpgtimvwjvdftancgcijpdpicygftwusmalwojtxgyfaysceumplrettfbbyyvrkxegnpbkybpyaicgerwqiclchnfinabxzffmxjwvkovmyzteqrwbtifdxknkmojlvqxsztnmjkyhktmckifgsklrwydiootjfqcgmrsxetfqmtszdyfyksrhqvrellpqdtxrnrprkwhzpzyuzfsmxktphmvszmldgkwtbnkojrpaspvuupgtbbkknffptquzaqsdeetpxiqqxnmteuogvyskfxzzntypmtvqxohvzxnymbsrvgzqhtcmrengxmyjhtbejlbiiqhxrbqmjreqkhfdlskkgiwndzumkvvvmesffksqbwhldopqgbbplxcowyahwxcibwpighbheiujylagobvzaapwyqfupjetfudnbewhorrmetttuqsuqksraanrjskroqgrudbjwsvalqvhhodzyxqaxetjygaowgfqlgzhaxinpduytzytxqvuwrdwxfktoslzanhbkrqbwlaqmaljqjgpallxtyshqdgqqptcgkedxevjgivyrdnrobojzgqrmzjcqffxrlcorzzxhwvbzjsqmjznrsgdrpghwngnykdpldmtzjwbsorgzqtrizubrclpprdpegeplskncgowxfdwxyniykjrmugeoltssahfsusuagrznwwlultuvclkzuonfjfxjofcixylermrnieiuxcrcqbbkropbtpkjuournhxetrsevcatervwvwgmmynfnyqjokabtagnratocthikefhcnuolhvahmjwymzsmhhfhatlvdwhhdpkqjaesweakoyicxcofltonociryqzbhltqlzijektuieyiimpuhdjxhspfkqirbejodrajcvfmzdwkrlgarpyyjnetdo" println(test.length) - longestDupSubstring(test).also { - println( - it - ) - println(it.length) - } +// longestDupSubstring(test).also { +// println( +// it +// ) +// println(it.length) +// } } From a967948dc78c84b3d110efacf9571e4aa8b545ba Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 14 May 2025 14:30:31 +0100 Subject: [PATCH 59/96] add 1044 rabin karp --- .../main/java/com/github/contest/Execute.kt | 2 + .../slidingWindow/SlidingWindowLeetcode.kt | 73 +++++++++++++++++++ .../customStructure/RabinKarpImpl.kt | 6 +- 3 files changed, 78 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 cc73082b..8c72ba83 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,6 +4,7 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic +import com.github.contest.strings.camelMatch import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -22,6 +23,7 @@ fun main() { fun launchPerformance() { val text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit".repeat(10) + val new = "banana".repeat(5000) val patterns = listOf( "Lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "xyz", "abc" 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 aba05c3c..921d51c3 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -318,5 +318,78 @@ fun findRepeatedDnaSequences(s: String): List { return res } +/** + * 1044. Longest Duplicate Substring + */ + +fun longestDupSubstring(s: String): String { + if (s.length == 2 && s[0] == s[1]) return "${s[0]}" + + var left = 1 + var right = s.length + var maxLen = 0 + var res = "" + + while (left < right) { + + val window = (left + right) / 2 + + if (window == maxLen) return res + + val check = findDuplicate(s, window) + + if (check != null) { + left = window + maxLen = window + res = check + } else right = window + } + + return res +} + + +private fun findDuplicate(s: String, length: Int): String? { + val base = 26 + val mod = 1_000_000_007 + var hash = 0L + var power = 1L + val seen = HashMap>() + + + for (i in 0 until length - 1) { + power = (power * base) % mod + } + + + for (i in 0 until length) { + hash = (hash * base + (s[i] - 'a')) % mod + } + seen.getOrPut(hash) { mutableListOf() }.add(0) + + + for (i in 1..s.length - length) { + + hash = (hash - (s[i - 1] - 'a') * power % mod + mod) % mod + + hash = (hash * base + (s[i + length - 1] - 'a')) % mod + + + if (seen.containsKey(hash)) { + val currentSub = s.substring(i, i + length) + for (start in seen[hash]!!) { + if (s.substring(start, start + length) == currentSub) { + return currentSub + } + } + seen[hash]!!.add(i) + } else { + seen[hash] = mutableListOf(i) + } + } + + return null +} + diff --git a/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt b/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt index b36a3013..c690d1ee 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/customStructure/RabinKarpImpl.kt @@ -59,11 +59,11 @@ fun rabinKarpMultiPattern(text: String, patterns: List): Map text.length) continue + val patternLen = pattern.length + if (patternLen == 0 || patternLen > text.length) continue var hash = 0 - for (i in 0 until m) { + for (i in 0 until patternLen) { hash = (d * hash + pattern[i].code) % q } From 0e50fe92acbb8e22da19ca9003c84f62ebfdc74f Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 14 May 2025 15:40:09 +0100 Subject: [PATCH 60/96] add 1763 --- .../slidingWindow/SlidingWindowLeetcode.kt | 45 +++++++++++++++++++ 1 file changed, 45 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 921d51c3..13a2d33d 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -391,5 +391,50 @@ private fun findDuplicate(s: String, length: Int): String? { return null } +/** + * 1763. Longest Nice Substring + */ + +fun longestNiceSubstring(s: String): String { + if (s.hasSingle()) return "" + + + (s.length downTo 2).forEach { window -> + s.windowed(window).forEach { + if (it.isNice()) return it + } + + } + + return emptyString() +} + +private fun String.isNice(): Boolean { + val set = mutableSetOf() + + for (char in this) { + set.add(char) + } + + for (char in this) { + if (char !in 'A'..'Z') { + if (!set.contains(char.uppercaseChar())) return false + } else { + if (!set.contains(char.lowercaseChar())) return false + } + } + + return true +} + +private fun emptyString() = "" + +private fun String.hasSingle() = when { + length == 1 -> true + else -> false +} + + + From 84da99d3a34a6d6c5a7ab95a183749d5e1e4b98b Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 19 May 2025 13:14:48 +0100 Subject: [PATCH 61/96] add 3024 --- .../com/github/contest/math/MathLeetcode.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt index 1603c1b0..669d5e58 100644 --- a/contest/src/main/java/com/github/contest/math/MathLeetcode.kt +++ b/contest/src/main/java/com/github/contest/math/MathLeetcode.kt @@ -213,4 +213,21 @@ private fun isEven(num: Int): Boolean { return even } +/** + * 3024. Type of Triangle + */ + +fun triangleType(nums: IntArray): String { + nums.sort() + val first = nums.first() + val mid = nums[nums.size / 2] + val last = nums.last() + + return when { + first + mid <= last -> "none" + first == mid && mid == last -> "equilateral" + first == mid || mid == last -> "isosceles" + else -> "scalene" + } +} From 204efc4a262e796bcd9eb49c99355a9261e23599 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 19 May 2025 14:22:46 +0100 Subject: [PATCH 62/96] add 2653 --- .../slidingWindow/SlidingWindowLeetcode.kt | 42 +++++++++++++++++++ 1 file changed, 42 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 13a2d33d..17bbbb41 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,7 @@ package com.github.contest.slidingWindow +import java.util.TreeSet + /** * 76. Minimum Window Substring @@ -434,6 +436,46 @@ private fun String.hasSingle() = when { else -> false } +/** + * 2653. Sliding SubArray Beauty + */ + +fun getSubArrayBeauty(nums: IntArray, k: Int, x: Int): IntArray { + val map = mutableMapOf() + val res = IntArray(nums.size - k + 1) + var left = 0 + var window = TreeSet() + + for (right in nums.indices) { + map[nums[right]] = map.getOrDefault(nums[right], 0) + 1 + window.add(nums[right]) + + if (right - left == k - 1) { + var cnt = 0 + var beauty = 0 + + for (num in window) { + cnt += map[num]!! + if (cnt >= x) { + beauty = if (num < 0) num else 0 + break + } + } + + res[left] = beauty + map[nums[left]] = map.getOrDefault(nums[left], 0) - 1 + if (map[nums[left]] == 0) { + map.remove(nums[left]) + window.remove(nums[left]) + } + left++ + } + } + + return res +} + + From 54d091be1bdcd3f7d44acdb268979899d520ecbd Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 19 May 2025 17:11:33 +0100 Subject: [PATCH 63/96] add 2760 --- .../slidingWindow/SlidingWindowLeetcode.kt | 43 +++++++++++++++++++ 1 file changed, 43 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 17bbbb41..eb6fc78b 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -475,6 +475,49 @@ fun getSubArrayBeauty(nums: IntArray, k: Int, x: Int): IntArray { return res } +/** + * 2760. Longest Even Odd Subarray With Threshold + */ + +fun longestAlternatingSubarray(nums: IntArray, threshold: Int): Int { + var longest = 0 + + (nums.size downTo 1).forEach { window -> + nums.toList().windowed(window) { + if (isValid(it, threshold)) { + longest = window + return@windowed + } + } + if (longest > 0) return longest + } + + return longest +} + +private fun isValid(window: List, threshold: Int): Boolean { + return when { + window.isEmpty() -> false + window.first() % 2 != 0 -> false + else -> { + + for (i in 0..window.size - 2) { + if (window[i] % 2 == window[i + 1] % 2) { + return false + } + } + + for (element in window) { + if (element > threshold) { + return false + } + } + + return true + } + } +} + From cc2a0c04a9801f40cc6e444fd1361c6259613fa7 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 20 May 2025 12:23:34 +0100 Subject: [PATCH 64/96] add 2760 alt sol --- .../SlidingWindowAlternativeSolution.kt | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt index 7c2747ab..52e3914e 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt @@ -49,4 +49,32 @@ fun minWindowOptimumSolution(s: String, t: String): String { } return if (minLength == Int.MAX_VALUE) "" else s.substring(minStart, minStart + minLength) +} + +/** + * 2760. Longest Even Odd Subarray With Threshold + * Alternative Solution with O(n) Time Complexity + */ + +fun longestAlternatingSubArrayAlternativeSolution(nums: IntArray, threshold: Int): Int { + var maxLength = 0 + var currentLength = 0 + + for (i in nums.indices) { + + if (nums[i] <= threshold && + (currentLength == 0 && isEven(nums[i]) || currentLength > 0 && nums[i] % 2 != nums[i - 1] % 2) + ) { + currentLength++ + maxLength = maxOf(maxLength, currentLength) + } else currentLength = if (nums[i] % 2 == 0 && nums[i] <= threshold) 1 else 0 + + } + + return maxLength +} + +private fun isEven(number: Int) = when { + number % 2 == 0 -> true + else -> false } \ No newline at end of file From 2a9b1dd84fb26b2722a1d484d9236f1b23fe6dc0 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 20 May 2025 12:51:58 +0100 Subject: [PATCH 65/96] add 2653 --- .../main/java/com/github/contest/Execute.kt | 8 +++-- .../SlidingWindowAlternativeSolution.kt | 34 ++++++++++++++++++- .../slidingWindow/SlidingWindowLeetcode.kt | 2 +- 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 8c72ba83..c47179f7 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,7 +4,7 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.strings.camelMatch +import com.github.contest.slidingWindow.getSubArrayBeautyAlternativeSolution import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,7 +16,11 @@ import java.util.TreeMap fun main() { - launchPerformance() + getSubArrayBeautyAlternativeSolution( + intArrayOf(1, -1, -3, -2, 3), + 3, + 2 + ).also { it.printArray() } } diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt index 52e3914e..fea6fb11 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt @@ -77,4 +77,36 @@ fun longestAlternatingSubArrayAlternativeSolution(nums: IntArray, threshold: Int private fun isEven(number: Int) = when { number % 2 == 0 -> true else -> false -} \ No newline at end of file +} + +/** + * 2653. Sliding Subarray Beauty + * Alternative Solution (TLE) must be classic sliding window + */ + +fun getSubArrayBeautyAlternativeSolution(nums: IntArray, k: Int, x: Int): IntArray { + var numbers = IntArray(101) + val res = mutableListOf() + + nums.toList().windowed(k) { + it.forEach { elem -> + val value = elem + 50 + numbers[value]++ + } + var cnt = 0 + + for (i in numbers.indices) { + if (numbers[i] > 0) cnt += numbers[i] + if (cnt >= x) { + if (i >= 50) res.add(0) else res.add(-(50 - i)) + break + } + } + + numbers = IntArray(101) + } + + return res.toIntArray() +} + + 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 eb6fc78b..652185ea 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -444,7 +444,7 @@ fun getSubArrayBeauty(nums: IntArray, k: Int, x: Int): IntArray { val map = mutableMapOf() val res = IntArray(nums.size - k + 1) var left = 0 - var window = TreeSet() + val window = TreeSet() for (right in nums.indices) { map[nums[right]] = map.getOrDefault(nums[right], 0) + 1 From e2068ac4f0632053187605f9d7f3bdcd969041b5 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 21 May 2025 10:10:03 +0100 Subject: [PATCH 66/96] change location 73 set zeros matrix --- .../com/leetcode_kotlin/AlgorithmLeetcode.kt | 30 ------------ .../leetcode_kotlin/AlgorithmProdVariant.kt | 37 --------------- .../AlternativeAlgorithmSolution.kt | 45 ------------------ .../contest/array/AlternativeSolutionArray.kt | 46 +++++++++++++++++++ .../com/github/contest/array/ArrayLeetcode.kt | 32 +++++++++++++ .../github/contest/array/ArrayProdVariant.kt | 26 +++++++++++ 6 files changed, 104 insertions(+), 112 deletions(-) diff --git a/app/src/main/java/com/leetcode_kotlin/AlgorithmLeetcode.kt b/app/src/main/java/com/leetcode_kotlin/AlgorithmLeetcode.kt index 3127f6ed..c75263b5 100644 --- a/app/src/main/java/com/leetcode_kotlin/AlgorithmLeetcode.kt +++ b/app/src/main/java/com/leetcode_kotlin/AlgorithmLeetcode.kt @@ -578,36 +578,6 @@ fun findDuplicates(nums: IntArray): List { return ans } -/** - * 73. Set Matrix Zeroes - */ - - -fun setZeroes(matrix: Array) { - val m = matrix.size - val n = matrix[0].size - - val forRows = BooleanArray(m) - val forCols = BooleanArray(n) - - for (i in 0 until m) { - for (j in 0 until n) { - if (matrix[i][j] == 0) { - forRows[i] = true - forCols[j] = true - } - } - } - - - for (i in 0 until m) { - for (j in 0 until n) { - if (forRows[i] || forCols[j]) { - matrix[i][j] = 0 - } - } - } -} /** * 48. Rotate Image diff --git a/app/src/main/java/com/leetcode_kotlin/AlgorithmProdVariant.kt b/app/src/main/java/com/leetcode_kotlin/AlgorithmProdVariant.kt index bbcc784f..19d759e8 100644 --- a/app/src/main/java/com/leetcode_kotlin/AlgorithmProdVariant.kt +++ b/app/src/main/java/com/leetcode_kotlin/AlgorithmProdVariant.kt @@ -580,43 +580,6 @@ fun heightProdVariant(root: TreeNode?): Int = when { else -> 1 + maxOf(heightProdVariant(root?.left), heightProdVariant(root?.right)) } -/** - * 73. Set Matrix Zeroes - * Prod Variant - */ - -fun setZeroesProdVariant(matrix: Array) { - val m = matrix.size - val n = matrix[0].size - var firstRowZero = false - var firstColZero = false - - - matrix.forEachIndexed { i, row -> - row.forEachIndexed { j, value -> - if (value == 0) { - if (i == 0) firstRowZero = true - if (j == 0) firstColZero = true - matrix[i][0] = 0 - matrix[0][j] = 0 - } - } - } - - - for (i in 1 until m) { - for (j in 1 until n) { - if (matrix[i][0] == 0 || matrix[0][j] == 0) { - matrix[i][j] = 0 - } - } - } - - - if (firstRowZero) matrix[0].fill(0) - if (firstColZero) for (i in 0 until m) matrix[i][0] = 0 -} - /** * 287. Find the Duplicate Number * Prod Variant diff --git a/app/src/main/java/com/leetcode_kotlin/AlternativeAlgorithmSolution.kt b/app/src/main/java/com/leetcode_kotlin/AlternativeAlgorithmSolution.kt index 4d312dad..120ff712 100644 --- a/app/src/main/java/com/leetcode_kotlin/AlternativeAlgorithmSolution.kt +++ b/app/src/main/java/com/leetcode_kotlin/AlternativeAlgorithmSolution.kt @@ -926,51 +926,6 @@ fun canBreak(start: Int, s: String, trie: TrieWordBreak): Boolean { return false } -/** - * 73. Set Matrix Zeroes - * Alternative Solution - */ - -fun setZeroesAltSolution(matrix: Array) { - val m = matrix.size - val n = matrix[0].size - var firstRowZero = false - var firstColZero = false - - - for (i in 0 until m) { - for (j in 0 until n) { - if (matrix[i][j] == 0) { - if (i == 0) firstRowZero = true - if (j == 0) firstColZero = true - matrix[i][0] = 0 - matrix[0][j] = 0 - } - } - } - - - for (i in 1 until m) { - for (j in 1 until n) { - if (matrix[i][0] == 0 || matrix[0][j] == 0) { - matrix[i][j] = 0 - } - } - } - - - if (firstRowZero) { - for (j in 0 until n) { - matrix[0][j] = 0 - } - } - if (firstColZero) { - for (i in 0 until m) { - matrix[i][0] = 0 - } - } -} - /** * 230. Kth Smallest Element in a BST * Alt Solution diff --git a/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt b/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt index df153d6b..6f39645e 100644 --- a/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt +++ b/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt @@ -164,3 +164,49 @@ fun pivotArrayAlternativeSolution(nums: IntArray, pivot: Int): IntArray { return result } + + +/** + * 73. Set Matrix Zeroes + * Alternative Solution + */ + +fun setZeroesAltSolution(matrix: Array) { + val m = matrix.size + val n = matrix[0].size + var firstRowZero = false + var firstColZero = false + + + for (i in 0 until m) { + for (j in 0 until n) { + if (matrix[i][j] == 0) { + if (i == 0) firstRowZero = true + if (j == 0) firstColZero = true + matrix[i][0] = 0 + matrix[0][j] = 0 + } + } + } + + + for (i in 1 until m) { + for (j in 1 until n) { + if (matrix[i][0] == 0 || matrix[0][j] == 0) { + matrix[i][j] = 0 + } + } + } + + + if (firstRowZero) { + for (j in 0 until n) { + matrix[0][j] = 0 + } + } + if (firstColZero) { + for (i in 0 until m) { + matrix[i][0] = 0 + } + } +} 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 24c100b4..5c2d88a0 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -347,3 +347,35 @@ fun isOdd(number: Int) = when { number % 2 != 0 -> true else -> false } + +/** + * 73. Set Matrix Zeroes + */ + + +fun setZeroes(matrix: Array) { + val m = matrix.size + val n = matrix[0].size + + val forRows = BooleanArray(m) + val forCols = BooleanArray(n) + + for (i in 0 until m) { + for (j in 0 until n) { + if (matrix[i][j] == 0) { + forRows[i] = true + forCols[j] = true + } + } + } + + + for (i in 0 until m) { + for (j in 0 until n) { + if (forRows[i] || forCols[j]) { + matrix[i][j] = 0 + } + } + } +} + 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 bba539c4..da1ddd55 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -149,3 +149,29 @@ fun threeConsecutiveOddsProdVariantIII(arr: IntArray): Boolean = .windowed(3) .any { window -> window.all { it % 2 != 0 } } + +/** + * 73. Set Matrix Zeroes + * Prod Variant + */ + +fun setZeroesProdVariant(matrix: Array): Unit { + val rowIndexed = BooleanArray(matrix.size) + val columnIndexed = BooleanArray(matrix[0].size) + + matrix.forEachIndexed { indexRow, row -> + row.forEachIndexed { indexCol, _ -> + if (row[indexCol] == 0) { + rowIndexed[indexRow] = true + columnIndexed[indexCol] = true + } + } + } + + matrix.forEachIndexed { index, row -> + row.forEachIndexed { indexCol, _ -> + if (rowIndexed[index] || columnIndexed[indexCol]) matrix[index][indexCol] = 0 + } + } + +} \ No newline at end of file From a911a48486a779f12502821364ad3def7e4aac7f Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 22 May 2025 12:49:52 +0100 Subject: [PATCH 67/96] add 3355 --- .../main/java/com/github/contest/Execute.kt | 11 ++++---- .../com/github/contest/array/ArrayLeetcode.kt | 25 +++++++++++++++++++ 2 files changed, 30 insertions(+), 6 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index c47179f7..ca6cd770 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,10 +1,10 @@ package com.github.contest +import com.github.contest.array.isZeroArray import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.getSubArrayBeautyAlternativeSolution import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,11 +16,10 @@ import java.util.TreeMap fun main() { - getSubArrayBeautyAlternativeSolution( - intArrayOf(1, -1, -3, -2, 3), - 3, - 2 - ).also { it.printArray() } + val nums = intArrayOf(3, 3, 2, 1) + val queries = arrayOf(intArrayOf(1, 3), intArrayOf(0, 2), intArrayOf(0, 0), intArrayOf(0, 0)) + + isZeroArray(nums, queries).also { println(it) } } 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 5c2d88a0..00becc8e 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -379,3 +379,28 @@ fun setZeroes(matrix: Array) { } } +/** + * 3355. Zero Array Transformation I + */ + + +fun isZeroArray(nums: IntArray, queries: Array): Boolean { + val diff = IntArray(nums.size) + var pref = 0 + + for (query in queries) { + val (l, r) = query + diff[l]++ + if (r + 1 < nums.size) diff[r + 1]-- + } + + + for (i in nums.indices) { + pref += diff[i] + if (nums[i] > pref) return false + } + + return true +} + + From 30622df677153d2da4308d09f3e845f9771da326 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 22 May 2025 13:18:09 +0100 Subject: [PATCH 68/96] add 1052 --- .../slidingWindow/SlidingWindowLeetcode.kt | 28 +++++++++++++++++++ 1 file changed, 28 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 652185ea..b19b1c64 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -518,6 +518,34 @@ private fun isValid(window: List, threshold: Int): Boolean { } } +/** + * 1052. Grumpy Bookstore Owner + */ + +fun maxSatisfied(customers: IntArray, grumpy: IntArray, minutes: Int): Int { + var notGrumpy = 0 + var maxCustomers = 0 + var left = 0 + var sum = 0 + + for (i in customers.indices) { + if (grumpy[i] == 0) notGrumpy += customers[i] + } + + + for (right in customers.indices) { + if (grumpy[right] == 1) sum += customers[right] + + if (right - left == minutes - 1) { + maxCustomers = maxOf(maxCustomers, notGrumpy + sum) + if (grumpy[left] == 1) sum -= customers[left] + left++ + } + } + + return maxCustomers +} + From 89493b63f176e0acba810d3052ee382401587492 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 22 May 2025 13:29:58 +0100 Subject: [PATCH 69/96] add 1052 prod variant --- .../slidingWindow/SlidingWindowProdVariant.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) 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 e959b165..4ac18c5a 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -110,3 +110,29 @@ fun findRepeatedDnaSequencesProdVariant(s: String): List = when { } } } + +/** + * 1052. Grumpy Bookstore Owner + * Prod Variant + */ + +fun maxSatisfiedProdVariant(customers: IntArray, grumpy: IntArray, minutes: Int): Int { + var notGrumpy = 0 + var maxCustomers = 0 + + customers.forEachIndexed { index, elem -> + if (grumpy[index] == 0) notGrumpy += elem + } + + + customers.withIndex().windowed(minutes) { window -> + val sum = window.sumOf { + if (grumpy[it.index] == 1) it.value + else 0 + } + + maxCustomers = maxOf(maxCustomers, notGrumpy + sum) + } + + return maxCustomers +} From cc4195fed713c5f23e9c755c34d81f7fc332216d Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 22 May 2025 13:44:28 +0100 Subject: [PATCH 70/96] add yet prod variant --- .../slidingWindow/SlidingWindowProdVariant.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) 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 4ac18c5a..6ec79651 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowProdVariant.kt @@ -136,3 +136,23 @@ fun maxSatisfiedProdVariant(customers: IntArray, grumpy: IntArray, minutes: Int) return maxCustomers } + +/** + * 1052. Grumpy Bookstore Owner + * Prod Variant + * Memory Limit Exceeded + */ + +fun maxSatisfiedProdVariantII(customers: IntArray, grumpy: IntArray, minutes: Int): Int = + customers.foldIndexed(0) { index, acc, value -> + if (grumpy[index] == 0) acc + value + else acc + } + customers.withIndex().windowed(minutes).map { window -> + window.sumOf { + if (grumpy[it.index] == 1) it.value + else 0 + } + + }.max() + + From 249fb06c6f0ae7dcd4fcca40f9fc2f3bdfef9924 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 23 May 2025 11:47:30 +0100 Subject: [PATCH 71/96] add 2932 --- .../main/java/com/github/contest/Execute.kt | 5 ----- .../com/github/contest/array/ArrayLeetcode.kt | 20 +++++++++++++++++++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index ca6cd770..341f0893 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,7 +1,6 @@ package com.github.contest -import com.github.contest.array.isZeroArray import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic @@ -16,10 +15,6 @@ import java.util.TreeMap fun main() { - val nums = intArrayOf(3, 3, 2, 1) - val queries = arrayOf(intArrayOf(1, 3), intArrayOf(0, 2), intArrayOf(0, 0), intArrayOf(0, 0)) - - isZeroArray(nums, queries).also { println(it) } } 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 00becc8e..eb6513b1 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -1,6 +1,7 @@ package com.github.contest.array import java.util.PriorityQueue +import kotlin.math.abs /** @@ -403,4 +404,23 @@ fun isZeroArray(nums: IntArray, queries: Array): Boolean { return true } +/** + * 2932. Maximum Strong Pair XOR I + */ + +fun maximumStrongPairXor(nums: IntArray): Int { + val pairs = mutableListOf>() + + for (i in nums.indices) { + pairs.add(Pair(nums[i], nums[i])) + for (j in i + 1 until nums.size) { + pairs.add(Pair(nums[i], nums[j])) + } + } + + return pairs + .filter { abs(it.first - it.second) <= minOf(it.first, it.second) } + .maxOf { it.first xor it.second } +} + From 3ba11d302169fb4e212b4650dcac90853be05d9a Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sat, 24 May 2025 12:28:56 +0100 Subject: [PATCH 72/96] add 3090 --- .../slidingWindow/SlidingWindowLeetcode.kt | 37 +++++++++++++++++++ 1 file changed, 37 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 b19b1c64..e754bf9a 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -546,6 +546,43 @@ fun maxSatisfied(customers: IntArray, grumpy: IntArray, minutes: Int): Int { return maxCustomers } +/** + * 3090. Maximum Length Substring With Two Occurrences + */ + +fun maximumLengthSubstring(s: String): Int { + if (s.length == 2) return 2 + + var maxLen = 0 + var left = 0 + val freq = mutableMapOf() + + for (right in s.indices) { + + val char = s[right] + freq[char] = freq.getOrDefault(char, 0) + 1 + + if (!isValidSubString(freq)) { + freq[s[left]] = freq.getOrDefault(s[left], 0) - 1 + if (freq[s[left]] == 0) freq.remove(s[left]) + left++ + } + + maxLen = maxOf(maxLen, right - left + 1) + } + + return maxLen +} + +private fun isValidSubString(map: Map): Boolean { + + for ((_, value) in map) { + if (value > 2) return false + } + + return true +} + From 53a186eae50e7ec68b096fd30c399d96cde3c45c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sat, 24 May 2025 15:04:38 +0100 Subject: [PATCH 73/96] add 2398 --- .../main/java/com/github/contest/Execute.kt | 3 +- .../slidingWindow/SlidingWindowLeetcode.kt | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 341f0893..3999f700 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,6 +4,7 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic +import com.github.contest.slidingWindow.maximumRobots import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -14,7 +15,7 @@ import java.util.TreeMap */ fun main() { - + maximumRobots(intArrayOf(3, 6, 1, 3, 4), intArrayOf(2, 1, 3, 4, 5), 25).also { println(it) } } 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 e754bf9a..108ce2cc 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -583,6 +583,38 @@ private fun isValidSubString(map: Map): Boolean { return true } +/** + * 2398. Maximum Number of Robots Within Budget + */ + +fun maximumRobots(chargeTimes: IntArray, runningCosts: IntArray, budget: Long): Int { + var maxRobots = 0 + var left = 0 + var sum = 0L + val window = mutableListOf() + + for (right in chargeTimes.indices) { + window.add(chargeTimes[right].toLong()) + sum += runningCosts[right].toLong() + var max = window.maxOrNull() ?: 0L + var k = (right - left + 1).toLong() + var cost = max + (k * sum) + + while (cost > budget) { + sum -= runningCosts[left] + window.removeFirst() + left++ + max = window.maxOrNull() ?: 0L + k = (right - left + 1).toLong() + cost = max + (k * sum) + } + + maxRobots = maxOf(maxRobots, right - left + 1) + } + + return maxRobots +} + From 762f06250c863df6081b4dfeafbe0f8dbe68a648 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sat, 24 May 2025 16:13:45 +0100 Subject: [PATCH 74/96] add 413 --- .../slidingWindow/SlidingWindowLeetcode.kt | 30 +++++++++++++++++++ 1 file changed, 30 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 108ce2cc..f7b0cd23 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -615,6 +615,36 @@ fun maximumRobots(chargeTimes: IntArray, runningCosts: IntArray, budget: Long): return maxRobots } +/** + * 413. Arithmetic Slices + */ + +fun numberOfArithmeticSlices(nums: IntArray): Int { + if (nums.size < 3) return 0 + + var count = 0 + + (3..nums.size).forEach { window -> + nums.toList().windowed(window) { + var isValid = true + val diff = it[1] - it[0] + + for (i in 2 until it.size) { + if (it[i] - it[i - 1] != diff) { + isValid = false + break + } + } + + if (isValid) count++ + } + } + + return count +} + + + From bfeea602df0285872abaed06e9467d767b1940fc Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sat, 24 May 2025 16:58:46 +0100 Subject: [PATCH 75/96] add 413 alt sol --- .../SlidingWindowAlternativeSolution.kt | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt index fea6fb11..94607a0a 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowAlternativeSolution.kt @@ -109,4 +109,33 @@ fun getSubArrayBeautyAlternativeSolution(nums: IntArray, k: Int, x: Int): IntArr return res.toIntArray() } +/** + * 413. Arithmetic Slices + * Alternative Solution with O(n) + */ + +fun numberOfArithmeticSlicesAlternativeSolution(nums: IntArray): Int { + if (nums.size < 3) return 0 + + var left = 0 + var count = 0 + val k = 3 + var diff = nums[1] - nums[0] + + for (right in 2 until nums.size) { + + if (nums[right] - nums[right - 1] != diff) { + diff = nums[right] - nums[right - 1] + left = right - 1 + } + + if (right - left >= k - 1) { + count++ + count += ((right - left) - (k - 1)) + } + } + + return count +} + From 36ecd9659901be873de9478a69981eb5da408fb0 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 25 May 2025 17:13:25 +0100 Subject: [PATCH 76/96] add 2131 --- .../main/java/com/github/contest/Execute.kt | 8 +++- .../contest/hashTable/HashTableLeetcode.kt | 39 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 3999f700..f815948b 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,10 +1,10 @@ package com.github.contest +import com.github.contest.hashTable.longestPalindrome import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.maximumRobots import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -15,7 +15,11 @@ import java.util.TreeMap */ fun main() { - maximumRobots(intArrayOf(3, 6, 1, 3, 4), intArrayOf(2, 1, 3, 4, 5), 25).also { println(it) } + + val arr = arrayOf("em", "pe", "mp", "ee", "pp", "me", "ep", "em", "em", "me") + longestPalindrome( + arr + ).also { println(it) } } 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 dd87bc84..5d541ba0 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -556,3 +556,42 @@ fun findEvenNumbers(digits: IntArray): IntArray { return result.sorted().toIntArray() } + +/** + * 2131. Longest Palindrome by Concatenating Two Letter Words + */ + +fun longestPalindrome(words: Array): Int { + var len = 0 + val freq = mutableMapOf() + + for (origin in words) { + val reverse = "${origin[1]}${origin[0]}" + + when { + origin == reverse -> { + if (freq.contains(origin)) { + len += 4 + freq.remove(origin) + } else freq[origin] = freq.getOrDefault(origin, 0) + 1 + } + + freq.contains(reverse) -> { + freq[reverse] = freq.getOrDefault(reverse, 0) - 1 + len += 4 + if (freq[reverse] == 0) freq.remove(reverse) + } + + else -> freq[origin] = freq.getOrDefault(origin, 0) + 1 + } + } + + for ((key, value) in freq) { + if ((key[0] == key[1]) && value == 1) { + len += 2 + break + } + } + + return len +} From 2fdee3ec655f01d1b58822706a84d28f63c19190 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 25 May 2025 17:41:18 +0100 Subject: [PATCH 77/96] add 2131 alt sol --- .../main/java/com/github/contest/Execute.kt | 4 +-- .../hashTable/HashTableAlternativeSolution.kt | 30 ++++++++++++++++++- 2 files changed, 31 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 f815948b..cb56a92a 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.longestPalindrome +import com.github.contest.hashTable.longestPalindromeAlternativeSolution import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic @@ -17,7 +17,7 @@ import java.util.TreeMap fun main() { val arr = arrayOf("em", "pe", "mp", "ee", "pp", "me", "ep", "em", "em", "me") - longestPalindrome( + longestPalindromeAlternativeSolution( arr ).also { println(it) } } diff --git a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt index cda22a12..aedd7827 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableAlternativeSolution.kt @@ -114,4 +114,32 @@ fun findEvenNumbersAlternativeSolution(digits: IntArray): IntArray { } return result.sorted().toIntArray() -} \ No newline at end of file +} + +/** + * 2131. Longest Palindrome by Concatenating Two Letter Words + */ + +fun longestPalindromeAlternativeSolution(words: Array): Int { + val freq = words.groupingBy { it }.eachCount().toMutableMap() + var len = 0 + var centralPair = 0 + + for ((word, count) in freq) { + if (word[0] == word[1]) { + if (count % 2 == 0) { + len += (count * 2) + } else { + len += (count - 1) * 2 + centralPair = 2 + } + } else { + val mirror = "${word[1]}${word[0]}" + val minPairs = minOf(count, freq.getOrDefault(mirror, 0)) + len += (minPairs * 4) + freq[word] = 0 + } + } + + return len + centralPair +} From 3fd5e0615941c881cd368d5cbebd6ef264b00fbd Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 26 May 2025 09:45:21 +0100 Subject: [PATCH 78/96] add 3206 --- .../main/java/com/github/contest/Execute.kt | 7 ++-- .../slidingWindow/SlidingWindowLeetcode.kt | 32 +++++++++++++++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index cb56a92a..be92e32a 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,10 +1,10 @@ package com.github.contest -import com.github.contest.hashTable.longestPalindromeAlternativeSolution import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic +import com.github.contest.slidingWindow.numberOfAlternatingGroups import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,10 +16,7 @@ import java.util.TreeMap fun main() { - val arr = arrayOf("em", "pe", "mp", "ee", "pp", "me", "ep", "em", "em", "me") - longestPalindromeAlternativeSolution( - arr - ).also { println(it) } + numberOfAlternatingGroups(intArrayOf(0, 1, 0)).also { println(it) } } 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 f7b0cd23..1aeac81e 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -643,6 +643,38 @@ fun numberOfArithmeticSlices(nums: IntArray): Int { return count } +/** + * 3206. Alternating Groups I + */ + +fun numberOfAlternatingGroups(colors: IntArray): Int { + var groups = 0 + var left = 0 + val k = 3 + var prevColor = colors[0] + + + for (right in 1 until colors.size + 2) { + val curr = when { + right >= colors.size -> colors[right - colors.size] + else -> colors[right] + } + + if (prevColor == curr) { + left = right + } + + prevColor = curr + + if (right - left == k - 1) { + groups++ + left++ + } + } + + return groups +} + From a48d2a69978008119fc81fde81f2d64225d2b0c7 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 26 May 2025 14:59:00 +0100 Subject: [PATCH 79/96] add 1652 --- .../slidingWindow/SlidingWindowLeetcode.kt | 49 +++++++++++++++++++ 1 file changed, 49 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 1aeac81e..35275901 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -675,6 +675,55 @@ fun numberOfAlternatingGroups(colors: IntArray): Int { return groups } +/** + * 1652. Defuse the Bomb + */ + +fun decrypt(code: IntArray, k: Int): IntArray = when { + k == 0 -> IntArray(code.size) + k > 0 -> { + val res = IntArray(code.size) + for (i in code.indices) { + var sum = 0 + var right = i + 1 + var k = k + + while (k != 0) { + sum += when { + right >= code.size -> code[right - code.size] + else -> code[right] + } + right++ + k-- + } + + res[i] = sum + } + res + } + + else -> { + val res = IntArray(code.size) + for (i in code.indices) { + var sum = 0 + var right = i - 1 + var k = k + + while (k < 0) { + sum += when { + right < 0 -> code[code.size + right] + else -> code[right] + } + right-- + k++ + } + + res[i] = sum + } + res + } +} + From bc7afaa66bb519edf1d0c148d1a0d15a089becb5 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 27 May 2025 16:39:50 +0100 Subject: [PATCH 80/96] add 594 --- .../contest/hashTable/HashTableLeetcode.kt | 18 ++++++++++++++++++ 1 file changed, 18 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 5d541ba0..557c034e 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -595,3 +595,21 @@ fun longestPalindrome(words: Array): Int { return len } + +/** + * 594. Longest Harmonious Subsequence + */ + +fun findLHS(nums: IntArray): Int { + val freq = nums.toList().groupingBy { it }.eachCount() + var longest = 0 + + for ((key, value) in freq) { + val more = key + 1 + if (freq.contains(more)) { + longest = maxOf(longest, freq.getOrDefault(more, 0) + value) + } + } + + return longest +} From 6abf3094379075c72f1ae19ba574e035fad3d0d7 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 27 May 2025 16:45:56 +0100 Subject: [PATCH 81/96] add 594 prod variant --- .../contest/hashTable/HashTableProdVariant.kt | 13 +++++++++++++ 1 file changed, 13 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 a80d0961..89e3e257 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -151,6 +151,19 @@ fun countVowelSubstringsProdVariantIII(word: String) = sequence { } }.sum() +/** + * 594. Longest Harmonious Subsequence + * Prod Variant + */ +fun findLHSProdVariant(nums: IntArray): Int = + nums.toList().groupingBy { it }.eachCount().let { map -> + map.maxOf { (num, value) -> + val more = num + 1 + if (map.contains(more)) { + map.getOrDefault(num, 0) + value + } else 0 + } + } From 447ee35f6c7016ec5ea6f2644d6cbe838fe1ad1a Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 27 May 2025 17:04:06 +0100 Subject: [PATCH 82/96] add yet variant --- .../contest/hashTable/HashTableProdVariant.kt | 15 +++++++++++++++ 1 file changed, 15 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 89e3e257..3aef8a92 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableProdVariant.kt @@ -166,4 +166,19 @@ fun findLHSProdVariant(nums: IntArray): Int = } } +fun findLHSProdVariantII(nums: IntArray): Int { + val freq = nums.groupBy { it }.mapValues { it.value.size } + + return freq.asSequence() + .flatMap { (key, _) -> + sequenceOf( + key to (key + 1), // Check next number + key to (key - 1) // Also check previous number (optional) + ) + } + .filter { (_, adjacent) -> freq.containsKey(adjacent) } + .maxOfOrNull { (key, adjacent) -> freq[key]!! + freq[adjacent]!! } + ?: 0 +} + From eceea8874d7d54880d100d5f2ab0ca07c9f62738 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 29 May 2025 12:58:51 +0100 Subject: [PATCH 83/96] add 284 --- .../main/java/com/github/contest/Execute.kt | 4 +-- .../github/contest/design/DesignLeetcode.kt | 25 +++++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index be92e32a..04a8ab16 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,7 +4,7 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.numberOfAlternatingGroups +import com.github.contest.slidingWindow.longestSubarray import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,7 +16,7 @@ import java.util.TreeMap fun main() { - numberOfAlternatingGroups(intArrayOf(0, 1, 0)).also { println(it) } + longestSubarray(intArrayOf(8, 2, 4, 7), 4).also { println(it) } } diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index d2614a26..73c9554b 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -180,4 +180,29 @@ class RandomizedSet() { fun getRandom(): Int = store.keys.random() +} + +/** + * 284. Peeking Iterator + */ + +class PeekingIterator(iterator: Iterator) : Iterator { + + private val store = mutableListOf() + + init { + while (iterator.hasNext()) store.add(iterator.next()) + } + + fun peek(): Int { + return store.first() + } + + override fun next(): Int { + return store.removeFirst() + } + + override fun hasNext(): Boolean { + return if (store.isNotEmpty()) true else false + } } \ No newline at end of file From ede2ed66aa8f88cf0f8b16859ec0e33b377376b8 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Thu, 29 May 2025 13:07:33 +0100 Subject: [PATCH 84/96] small change --- .../src/main/java/com/github/contest/design/DesignLeetcode.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index 73c9554b..ee82d46a 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -203,6 +203,6 @@ class PeekingIterator(iterator: Iterator) : Iterator { } override fun hasNext(): Boolean { - return if (store.isNotEmpty()) true else false + return store.isNotEmpty() } } \ No newline at end of file From 034db1206eae10d84dd2e01975c0231220ca83db Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 30 May 2025 17:53:55 +0100 Subject: [PATCH 85/96] add 1286 --- .../main/java/com/github/contest/Execute.kt | 4 +- .../github/contest/design/DesignLeetcode.kt | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 04a8ab16..cea10b1b 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,10 +1,10 @@ package com.github.contest +import com.github.contest.design.wrapper import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.longestSubarray import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,7 +16,7 @@ import java.util.TreeMap fun main() { - longestSubarray(intArrayOf(8, 2, 4, 7), 4).also { println(it) } + wrapper() } diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index ee82d46a..cf8cc404 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -205,4 +205,44 @@ class PeekingIterator(iterator: Iterator) : Iterator { override fun hasNext(): Boolean { return store.isNotEmpty() } +} + +/** + * 1286. Iterator for Combination + */ + +class CombinationIterator(characters: String, combinationLength: Int) { + + private val store = mutableListOf() + + init { + combine(0, characters, StringBuilder(), store, combinationLength) + } + + fun next(): String = store.removeFirst() + + fun hasNext(): Boolean = store.isNotEmpty() + + private fun combine( + index: Int, + str: String, + subset: StringBuilder, + store: MutableList, + limit: Int + ) { + + if (subset.length == limit) { + store.add(subset.toString()) + return + } + + if (index == str.length) return + + subset.append(str[index]) + combine(index + 1, str, subset, store, limit) + + subset.deleteAt(subset.length - 1) + combine(index + 1, str, subset, store, limit) + } + } \ No newline at end of file From 5183eb0cd19f91aa0260b428b97a71fedc702142 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 1 Jun 2025 15:57:24 +0100 Subject: [PATCH 86/96] add 341 --- .../github/contest/design/DesignLeetcode.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index cf8cc404..2145960c 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -245,4 +245,46 @@ class CombinationIterator(characters: String, combinationLength: Int) { combine(index + 1, str, subset, store, limit) } +} + +/** + * 341. Flatten Nested List Iterator + */ + +class NestedInteger { + fun getInteger(): Int? { + return null + } + + fun getList(): List? { + return null + } +} + +class NestedIterator(nestedList: List) { + + private val store = mutableListOf() + + init { + nestedList.forEach { + dfs(it) + } + } + + private fun dfs(obj: NestedInteger) { + val action = obj.getInteger() + if (action != null) { + store.add(action) + return + } + + obj.getList()?.forEach { + dfs(it) + } + } + + + fun next(): Int = store.removeFirst() + + fun hasNext(): Boolean = store.isNotEmpty() } \ No newline at end of file From 661f4d7c7ee51ebcd0ebbd6aa4c57470ed5c4857 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Sun, 1 Jun 2025 16:39:19 +0100 Subject: [PATCH 87/96] add 341 --- .../design/DesignAlternativeSolution.kt | 29 +++++++++++++++++++ .../github/contest/design/DesignLeetcode.kt | 3 ++ 2 files changed, 32 insertions(+) create mode 100644 contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt diff --git a/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt b/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt new file mode 100644 index 00000000..05a2edc5 --- /dev/null +++ b/contest/src/main/java/com/github/contest/design/DesignAlternativeSolution.kt @@ -0,0 +1,29 @@ +package com.github.contest.design + +/** + * 341. Flatten Nested List Iterator + * Alternative Solution + */ + +class NestedIteratorAlternativeSolution(nestedList: List) { + + private val stack = ArrayDeque().apply { + nestedList.reversed().forEach { addFirst(it) } + } + + fun next(): Int { + if (!hasNext()) throw NoSuchElementException() + return stack.removeFirst().getInteger()!! + } + + fun hasNext(): Boolean { + while (stack.isNotEmpty()) { + val top = stack.first() + if (top.isInteger()) { + return true + } + stack.removeFirst().getList()?.reversed()?.forEach { stack.addFirst(it) } + } + return false + } +} \ No newline at end of file diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index 2145960c..2239dd11 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -252,6 +252,9 @@ class CombinationIterator(characters: String, combinationLength: Int) { */ class NestedInteger { + + fun isInteger() = true + fun getInteger(): Int? { return null } From 33b4dd44a30c5ae9ec61d93875ee3ca135ad4a36 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 2 Jun 2025 15:13:45 +0100 Subject: [PATCH 88/96] add 900 --- .../main/java/com/github/contest/Execute.kt | 11 ++++- .../github/contest/design/DesignLeetcode.kt | 41 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index cea10b1b..ec6c4942 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.design.wrapper +import com.github.contest.design.RLEIterator import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic @@ -16,7 +16,14 @@ import java.util.TreeMap fun main() { - wrapper() + val rleIterator = RLEIterator(intArrayOf(5, 2, 1, 22)) + rleIterator.next(5).also { println(it) } + rleIterator.next(2).also { println(it) } + rleIterator.next(1).also { println(it) } +} + +infix fun Int.myRange(to: Int): IntRange { + return this..to } diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index 2239dd11..7415521e 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -290,4 +290,45 @@ class NestedIterator(nestedList: List) { fun next(): Int = store.removeFirst() fun hasNext(): Boolean = store.isNotEmpty() +} + +/** + * 900. RLE Iterator + */ + +class RLEIterator(private val encoding: IntArray) { + + private var count = 0L + + init { + for (i in encoding.indices step 2) count += encoding[i].toLong() + } + + fun next(n: Int): Int { + if (n > count) { + count = -1 + return -1 + } + + var n = n + for (i in encoding.indices step 2) { + + when { + n <= encoding[i] -> { + encoding[i] -= n + count -= n + return encoding[i + 1] + } + + else -> { + n -= encoding[i] + count -= encoding[i] + encoding[i] = 0 + } + } + } + + return 0 + } + } \ No newline at end of file From 54d66925a524547e483f02c6cab9d6ca3415e60c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 3 Jun 2025 11:16:02 +0100 Subject: [PATCH 89/96] add 438 --- .../slidingWindow/SlidingWindowLeetcode.kt | 43 +++++++++++++++++++ 1 file changed, 43 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 35275901..0cb10ea0 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -724,6 +724,49 @@ fun decrypt(code: IntArray, k: Int): IntArray = when { } } +/** + * 438. Find All Anagrams in a String + */ + +fun findAnagrams(s: String, p: String): List { + if (p.length > s.length) return listOf() + + val pattern = p.eachCount() + val store = mutableMapOf() + var left = 0 + val k = p.length + val ind = mutableListOf() + + for (right in s.indices) { + val char = s[right] + store[char] = store.getOrDefault(char, 0) + 1 + + if (right - left == k - 1) { + if (equalMaps(store, pattern)) ind.add(left) + store[s[left]] = store.getOrDefault(s[left], 0) - 1 + if (store[s[left]] == 0) store.remove(s[left]) + left++ + } + + } + + return ind +} + +private fun equalMaps(first: Map, second: Map): Boolean { + + for ((char, count) in first) { + if (!second.contains(char) || second[char] != count) return false + } + + return true +} + +private fun String.eachCount(): MutableMap { + val count = mutableMapOf() + for (char in this) count[char] = count.getOrDefault(char, 0) + 1 + return count +} From 8f5167c718520c8fae38af49eaa86be004daa56a Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 3 Jun 2025 11:17:59 +0100 Subject: [PATCH 90/96] small changes --- contest/src/main/java/com/github/contest/Execute.kt | 7 ++----- .../github/contest/slidingWindow/SlidingWindowLeetcode.kt | 2 +- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index ec6c4942..088257dd 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -1,10 +1,10 @@ package com.github.contest -import com.github.contest.design.RLEIterator import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic +import com.github.contest.slidingWindow.findAnagrams import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,10 +16,7 @@ import java.util.TreeMap fun main() { - val rleIterator = RLEIterator(intArrayOf(5, 2, 1, 22)) - rleIterator.next(5).also { println(it) } - rleIterator.next(2).also { println(it) } - rleIterator.next(1).also { println(it) } + findAnagrams("abnkjhgidhr", "abn").also { println(it) } } infix fun Int.myRange(to: Int): IntRange { 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 0cb10ea0..701eaf1f 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -753,7 +753,7 @@ fun findAnagrams(s: String, p: String): List { return ind } -private fun equalMaps(first: Map, second: Map): Boolean { +private fun > equalMaps(first: Map, second: Map): Boolean { for ((char, count) in first) { if (!second.contains(char) || second[char] != count) return false From a9c2d15d25dbfd0258ee025c0a0ac9a3b4826113 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 4 Jun 2025 13:46:11 +0100 Subject: [PATCH 91/96] add 933 --- .../main/java/com/github/contest/Execute.kt | 1 + .../github/contest/design/DesignLeetcode.kt | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 088257dd..5a057305 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -17,6 +17,7 @@ import java.util.TreeMap fun main() { findAnagrams("abnkjhgidhr", "abn").also { println(it) } + } infix fun Int.myRange(to: Int): IntRange { diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index 7415521e..a900891c 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -1,5 +1,7 @@ package com.github.contest.design +import java.util.LinkedList + /** * 1352. Product of the Last K Numbers */ @@ -331,4 +333,22 @@ class RLEIterator(private val encoding: IntArray) { return 0 } +} + +/** + * 933. Number of Recent Calls + */ + +class RecentCounter() { + + private val queue = LinkedList() + + fun ping(t: Int): Int { + queue.offer(t) + + while (queue.peek() < t - 3000) queue.poll() + + return queue.size + } + } \ No newline at end of file From d0c55839490f0fcc78f2d9abde92d5bb8a7b2f35 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 4 Jun 2025 13:46:52 +0100 Subject: [PATCH 92/96] add 901 --- .../github/contest/design/DesignLeetcode.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt index a900891c..ed079e15 100644 --- a/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt +++ b/contest/src/main/java/com/github/contest/design/DesignLeetcode.kt @@ -351,4 +351,23 @@ class RecentCounter() { return queue.size } +} + +/** + * 901. Online Stock Span + */ + +class StockSpanner() { + + private val stocks = ArrayDeque>() + + fun next(price: Int): Int { + var span = 1 + + while (stocks.isNotEmpty() && stocks.last().first <= price) span += stocks.removeLast().second + + stocks.addLast(price to span) + return span + } + } \ No newline at end of file From 8cbcfbd97823e33c1f0f8f0e16e5ca69307f5beb Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Tue, 10 Jun 2025 13:32:52 +0100 Subject: [PATCH 93/96] add 3442 --- .../main/java/com/github/contest/Execute.kt | 5 ++--- .../contest/hashTable/HashTableLeetcode.kt | 21 +++++++++++++++++++ 2 files changed, 23 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 5a057305..b943336c 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -4,7 +4,6 @@ package com.github.contest import com.github.contest.math.numberOfPowerfulInt import com.github.contest.slidingWindow.customStructure.rabinKarpMultiPattern import com.github.contest.slidingWindow.customStructure.slidingWindowClassic -import com.github.contest.slidingWindow.findAnagrams import com.github.contest.strings.fullJustify import com.github.contest.strings.subStrHash import java.util.TreeMap @@ -16,8 +15,8 @@ import java.util.TreeMap fun main() { - findAnagrams("abnkjhgidhr", "abn").also { println(it) } - + val list = mutableListOf(-1) + println(list) } infix fun Int.myRange(to: Int): IntRange { 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 557c034e..c2c2578a 100644 --- a/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt +++ b/contest/src/main/java/com/github/contest/hashTable/HashTableLeetcode.kt @@ -613,3 +613,24 @@ fun findLHS(nums: IntArray): Int { return longest } + +/** + * 3442. Maximum Difference Between Even and Odd Frequency I + */ + +fun maxDifference(s: String): Int { + var odd = 0 + var even = Int.MAX_VALUE + val alpha = IntArray(26) + + for (char in s) { + alpha[char - 'a']++ + } + + for (i in 0 until 26) { + if (alpha[i] % 2 != 0) odd = maxOf(odd, alpha[i]) + else if (alpha[i] != 0) even = minOf(even, alpha[i]) + } + + return odd - even +} From 42a1acfb7750532e6d865bb1d4a3575532bbbf40 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 16 Jun 2025 10:16:19 +0100 Subject: [PATCH 94/96] add 2016 --- .../com/github/contest/array/ArrayLeetcode.kt | 16 ++++++++++++++++ 1 file changed, 16 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 eb6513b1..98281aed 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -423,4 +423,20 @@ fun maximumStrongPairXor(nums: IntArray): Int { .maxOf { it.first xor it.second } } +/** + * 2016. Maximum Difference Between Increasing Elements + */ + +fun maximumDifference(nums: IntArray): Int { + var diff = -1 + + for (i in nums.indices) { + for (j in i + 1 until nums.size) { + if (nums[i] < nums[j]) diff = maxOf(diff, nums[j] - nums[i]) + } + } + + return diff +} + From 0191c5eeac96b95a5c4cf1ef92a1719fe1397995 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 16 Jun 2025 10:19:00 +0100 Subject: [PATCH 95/96] add 2016 alternative solution --- .../contest/array/AlternativeSolutionArray.kt | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt b/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt index 6f39645e..2479a716 100644 --- a/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt +++ b/contest/src/main/java/com/github/contest/array/AlternativeSolutionArray.kt @@ -210,3 +210,24 @@ fun setZeroesAltSolution(matrix: Array) { } } } + +/** + * 2016. Maximum Difference Between Increasing Elements + * Alternative Solution + */ + +fun maximumDifferenceAlternativeSolution(nums: IntArray): Int { + var diff = -1 + var minVal = Int.MAX_VALUE + + for (i in nums.indices) { + when { + nums[i] < minVal -> minVal = minOf(minVal, nums[i]) + else -> if (nums[i] > minVal) diff = maxOf(diff, nums[i] - minVal) else continue + } + } + + return diff +} + + From 6bd66754899fd16a6f6d98a1dc8c37e9c28a1423 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Mon, 16 Jun 2025 12:25:01 +0100 Subject: [PATCH 96/96] add 2016 --- .../github/contest/array/ArrayProdVariant.kt | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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 da1ddd55..c17493a4 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -174,4 +174,23 @@ fun setZeroesProdVariant(matrix: Array): Unit { } } +} + +/** + * 2016. Maximum Difference Between Increasing Elements + * Prod Variant + */ + +fun maximumDifferenceProdVariant(nums: IntArray): Int { + var minVal = Int.MAX_VALUE + return nums.maxOf { + when { + it < minVal -> { + minVal = minOf(minVal, it) + 0 + } + + else -> if (it > minVal) it - minVal else 0 + } + } } \ No newline at end of file