diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index 183b6c92..cab31315 100644 --- a/contest/src/main/java/com/github/contest/Execute.kt +++ b/contest/src/main/java/com/github/contest/Execute.kt @@ -5,7 +5,6 @@ import com.github.contest.hashTable.countGoodAlternativeSolution 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,8 +14,6 @@ import java.util.TreeMap fun main() { - trap(intArrayOf(5, 1, 6, 2, 1, 2, 1, 3)).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 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 +} 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..2da15132 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++ + } + + + while (maxCount >= k) { + count += nums.size - right + if (nums[left] == maxNum) { + maxCount-- + } + left++ + } + } + + return count +}