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 +} 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 + } + }