From ff76035b47ef680b11331add5ec85041a46e8980 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:12:05 +0100 Subject: [PATCH 1/5] add 56 --- .../com/github/contest/array/ArrayLeetcode.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) 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 acbdd065..7a62b585 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayLeetcode.kt @@ -1,5 +1,7 @@ package com.github.contest.array +import java.util.PriorityQueue + /** * 1800. Maximum Ascending Subarray Sum @@ -257,3 +259,39 @@ fun buildArray(nums: IntArray): IntArray { return new } +/** + * 56. Merge Intervals + */ + +fun merge(intervals: Array): Array { + if (intervals.size == 1) return intervals + + val pq = PriorityQueue { a: IntArray, b: IntArray -> a[0] - b[0] } + val k = 2 + var temp = IntArray(k) + val res = mutableListOf() + + for (interval in intervals) { + pq.offer(interval) + } + + val (start, end) = pq.poll() + temp[0] = start + temp[1] = end + + while (pq.isNotEmpty()) { + val (start, end) = pq.poll() + if (temp[1] in start..end) temp[1] = end + else if (temp[1] < start) { + res.add(temp) + temp = IntArray(k) + temp[0] = start + temp[1] = end + } + } + + res.add(temp) + + return res.toTypedArray() +} + From e05c039ffcd5b59899d8f7c871d04c68fce57ab0 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:43:15 +0100 Subject: [PATCH 2/5] add 56 for prod variant --- .../github/contest/array/ArrayProdVariant.kt | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt index c2a2266f..659c1562 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -72,4 +72,27 @@ fun applyOperationsProdVariantII(nums: IntArray): IntArray { nums.fill(0, insertPos) return nums +} + +/** + * 56. Merge Intervals + * Prod Variant + */ + +fun mergeProdVariantStage(intervals: Array): Array { + if (intervals.size == 1) return intervals + + intervals.sortBy { it[0] } + val merged = mutableListOf() + var current = intervals[0] + + intervals.drop(1).forEach { + if (current[1] in it[0]..it[1]) current[1] = maxOf(current[1], it[1]) + else { + merged.add(current) + current = it + } + } + + return merged.toTypedArray() } \ No newline at end of file From 14b6f521643faba7d8881e45f1e56a4522153ea7 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 13:48:05 +0100 Subject: [PATCH 3/5] add new prod variant --- .../java/com/github/contest/array/ArrayProdVariant.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt index 659c1562..f97b446b 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -95,4 +95,12 @@ fun mergeProdVariantStage(intervals: Array): Array { } return merged.toTypedArray() -} \ No newline at end of file +} + +fun mergeProdVariantII(intervals: Array): Array = + intervals.sortedBy { it[0] }.fold(mutableListOf()) { merged, interval -> + merged.lastOrNull()?.takeIf { it[1] >= interval[0] }?.let { + it[1] = maxOf(it[1], interval[1]) + } ?: merged.add(interval) + merged + }.toTypedArray() \ No newline at end of file From ebf47db25252864561020bd0e250aba4809bd08c Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 15:02:47 +0100 Subject: [PATCH 4/5] add 1920 prod variant --- .../github/contest/array/ArrayProdVariant.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt index f97b446b..7ee7363e 100644 --- a/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt +++ b/contest/src/main/java/com/github/contest/array/ArrayProdVariant.kt @@ -74,6 +74,23 @@ fun applyOperationsProdVariantII(nums: IntArray): IntArray { return nums } +/** + * 1920. Build Array from Permutation + */ + +fun buildArrayProdVariant(nums: IntArray): IntArray { + nums.forEachIndexed { index, _ -> + val new = nums[nums[index]] % nums.size + val prev = nums[index] + nums[index] = (new * nums.size) + prev + } + nums.forEachIndexed { index, _ -> + nums[index] /= nums.size + } + + return nums +} + /** * 56. Merge Intervals * Prod Variant From 97aada247989b60e9a917d35d6db9d7b648d35d1 Mon Sep 17 00:00:00 2001 From: Ashwagandha-coder Date: Wed, 7 May 2025 16:22:26 +0100 Subject: [PATCH 5/5] add 209 --- .../slidingWindow/SlidingWindowLeetcode.kt | 44 +++++++++++++++++++ 1 file changed, 44 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 2da15132..238ed13b 100644 --- a/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt +++ b/contest/src/main/java/com/github/contest/slidingWindow/SlidingWindowLeetcode.kt @@ -161,3 +161,47 @@ fun countSubArrayWithMaxElement(nums: IntArray, k: Int): Long { return count } + +/** + * 209. Minimum Size Subarray Sum + */ + +fun minSubArrayLen(target: Int, nums: IntArray): Int { + var minLen = Int.MAX_VALUE + var sum = 0 + var left = 0 + var currentLen = 0 + + for (element in nums) { + sum += element + currentLen++ + if (sum >= target) { + minLen = minOf(minLen, currentLen) + var localLen = minLen + while (sum >= target) { + if (sum == target) break + if (localLen == 1) return 1 + if (sum - nums[left] < target) break + else { + sum -= nums[left] + localLen-- + left++ + } + } + minLen = minOf(minLen, localLen) + currentLen = minOf(currentLen, localLen) + } + + + if (currentLen == minLen) { + sum -= nums[left] + left++ + currentLen-- + } + } + + return when { + minLen == Int.MAX_VALUE -> 0 + else -> minLen + } +}