Skip to content

Commit 6d6f37c

Browse files
authored
Merge pull request neetcode-gh#772 from Raven1233/main
Added 239-Sliding-Window-Maximum.kt, 4-Median-Of-Two-Sorted-Arrays.kt…
2 parents e7722e5 + ae7c211 commit 6d6f37c

File tree

3 files changed

+71
-0
lines changed

3 files changed

+71
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
fun findMin(nums: IntArray): Int {
3+
val n = nums.size
4+
if(n == 1) return nums[0]
5+
var low = 0
6+
var high = n - 1
7+
var min = Int.MIN_VALUE
8+
while(low < high) {
9+
var mid = low + (high - low)/2
10+
if(nums[mid] < nums[high]) {
11+
high = mid
12+
} else {
13+
low = mid + 1
14+
}
15+
min = nums[low]
16+
}
17+
return min
18+
}
19+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
fun maxSlidingWindow(nums: IntArray, k: Int): IntArray {
3+
if (nums.isEmpty() || k == 0) {
4+
return intArrayOf()
5+
}
6+
var i = 0
7+
val queue = arrayListOf<Int>()
8+
val array = IntArray(nums.size - k + 1)
9+
var slideIndex = 0
10+
11+
while (i < nums.size) {
12+
/**
13+
* remove head if it is out of range of the sliding window
14+
*/
15+
if (queue.isNotEmpty() && i - queue[0] == k) {
16+
queue.removeAt(0)
17+
}
18+
19+
/**
20+
* remove from the tail if it's smaller than nums[i]
21+
*/
22+
var j = queue.size - 1
23+
while (queue.isNotEmpty() && j >= 0 && nums[queue[j]] < nums[i]) {
24+
queue.removeAt(queue.size - 1)
25+
j --
26+
}
27+
28+
queue.add(i)
29+
if (i - k + 1 >= 0) {
30+
array[slideIndex ++] = nums[queue[0]]
31+
}
32+
33+
i++
34+
}
35+
36+
return array
37+
}
38+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
fun findMedianSortedArrays(nums1: IntArray, nums2: IntArray): Double {
3+
var i1 = 0
4+
var i2 = 0
5+
fun getNext() = when {
6+
i1 < nums1.size && i2 < nums2.size -> if (nums1[i1] < nums2[i2]) nums1[i1++] else nums2[i2++]
7+
i1 < nums1.size -> nums1[i1++]
8+
else -> nums2[i2++]
9+
}
10+
val arr = IntArray(nums1.size + nums2.size) { getNext() }
11+
return if (arr.size % 2 == 1) arr[arr.size / 2].toDouble()
12+
else (arr[arr.size / 2] + arr[arr.size / 2 - 1]) / 2.0
13+
}
14+
}

0 commit comments

Comments
 (0)