Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions contest/src/main/java/com/github/contest/Execute.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand All @@ -15,8 +14,6 @@ import java.util.TreeMap

fun main() {

trap(intArrayOf(5, 1, 6, 2, 1, 2, 1, 3)).also { println(it) }


}

Expand Down
34 changes: 34 additions & 0 deletions contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -207,5 +207,39 @@ fun rotate(nums: IntArray, k: Int) {
}
}

/**
* 228. Summary Ranges
*/

fun summaryRanges(nums: IntArray): List<String> {
val result = mutableListOf<String>()
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
}


Original file line number Diff line number Diff line change
Expand Up @@ -133,3 +133,31 @@ private fun equalsMap(comparable: Map<String, Int>, base: Map<String, Int>): 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
}