diff --git a/contest/src/main/java/com/github/contest/Execute.kt b/contest/src/main/java/com/github/contest/Execute.kt index be92e32a..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.numberOfAlternatingGroups 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) } + 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 d2614a26..cf8cc404 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,69 @@ 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 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 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 +} +