From 8acfc534f8e0282f25407bd471fdd551e931fbca Mon Sep 17 00:00:00 2001 From: SubhadeepDas Date: Tue, 9 Aug 2022 17:39:20 +0530 Subject: [PATCH] Added 295-Find-Median-From-Data-Stream.kt and 79-Word-Search.kt --- kotlin/295-Find-Median-From-Data-Stream.kt | 19 ++++++++ kotlin/79-Word-Search.kt | 50 ++++++++++++++++++++++ 2 files changed, 69 insertions(+) create mode 100644 kotlin/295-Find-Median-From-Data-Stream.kt create mode 100644 kotlin/79-Word-Search.kt diff --git a/kotlin/295-Find-Median-From-Data-Stream.kt b/kotlin/295-Find-Median-From-Data-Stream.kt new file mode 100644 index 000000000..bbb820eaf --- /dev/null +++ b/kotlin/295-Find-Median-From-Data-Stream.kt @@ -0,0 +1,19 @@ +class MedianFinder() { + + /** initialize your data structure here. */ + val smaller = PriorityQueue(Comparator { a, b -> b - a }) + val larger = PriorityQueue() + + fun addNum(num: Int) { + if (smaller.isEmpty() || num <= smaller.peek()) smaller.offer(num) + else larger.offer(num) + if (smaller.size > larger.size + 1) larger.offer(smaller.poll()) + else if (larger.size > smaller.size) smaller.offer(larger.poll()) + } + + fun findMedian(): Double { + val even = (larger.size + smaller.size) % 2 == 0 + return if (even) (larger.peek() + smaller.peek()) / 2.0 + else smaller.peek().toDouble() + } +} \ No newline at end of file diff --git a/kotlin/79-Word-Search.kt b/kotlin/79-Word-Search.kt new file mode 100644 index 000000000..f5f6c5994 --- /dev/null +++ b/kotlin/79-Word-Search.kt @@ -0,0 +1,50 @@ +class Solution { +var ROWS: Int = 0 +var COLS: Int = 0 + + + fun exist(board: Array, word: String): Boolean { + + ROWS = board.count() + COLS = board[0].count() + + for (row in 0 until ROWS) { + for (col in 0 until COLS) { + if (dfs(board, row, col, word, 0)) + return true + } + } + + + return false + } + + fun dfs(board: Array, row: Int, col: Int, word: String, indx: Int): Boolean { + /* Step 1). check the bottom case. */ + if (indx == word.count()) + return true + /* Step 2). Check the boundaries. */ + if (row < 0 || row == ROWS || col < 0 || col == COLS || board[row][col] != word[indx]) + return false + + // mark the path before the next exploration + board[row][col] = '#' + var found = false + val rowOffsets = intArrayOf(0, 1, 0, -1) + val colOffsets = intArrayOf(1, 0, -1, 0) + + for (i in 0..3) { + found = dfs(board, row + rowOffsets[i], col + colOffsets[i], word, indx + 1) + if (found) + break + + } + /* Step 4). clean up and return the result. */ + board[row][col] = word[indx] + + return found + } + + + +}