From 249fb06c6f0ae7dcd4fcca40f9fc2f3bdfef9924 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Fri, 23 May 2025 11:47:30 +0100 Subject: [PATCH 1/5] 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 2/5] 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 3/5] 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 4/5] 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 5/5] 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 +} +