Skip to content

Commit 7936e11

Browse files
authored
Replaced java Stack with ArrayDeque
1 parent 6965cec commit 7936e11

File tree

9 files changed

+46
-60
lines changed

9 files changed

+46
-60
lines changed

src/main/kotlin/g0001_0100/s0020_valid_parentheses/Solution.kt

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,19 @@ package g0001_0100.s0020_valid_parentheses
44
// #Data_Structure_I_Day_9_Stack_Queue #Udemy_Strings
55
// #2023_07_03_Time_137_ms_(88.76%)_Space_33.7_MB_(90.45%)
66

7-
import java.util.Stack
8-
97
class Solution {
108
fun isValid(s: String): Boolean {
11-
val stack = Stack<Char>()
9+
val stack = ArrayDeque<Char>()
1210
for (element in s) {
1311
val c = element
1412
if (c == '(' || c == '[' || c == '{') {
15-
stack.push(c)
16-
} else if (c == ')' && stack.isNotEmpty() && stack.peek() == '(') {
17-
stack.pop()
18-
} else if (c == '}' && stack.isNotEmpty() && stack.peek() == '{') {
19-
stack.pop()
20-
} else if (c == ']' && stack.isNotEmpty() && stack.peek() == '[') {
21-
stack.pop()
13+
stack.addLast(c)
14+
} else if (c == ')' && stack.isNotEmpty() && stack.last() == '(') {
15+
stack.removeLast()
16+
} else if (c == '}' && stack.isNotEmpty() && stack.last() == '{') {
17+
stack.removeLast()
18+
} else if (c == ']' && stack.isNotEmpty() && stack.last() == '[') {
19+
stack.removeLast()
2220
} else {
2321
return false
2422
}

src/main/kotlin/g0001_0100/s0077_combinations/Solution.kt

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,18 @@ package g0001_0100.s0077_combinations
33
// #Medium #Backtracking #Algorithm_I_Day_11_Recursion_Backtracking
44
// #2023_07_10_Time_232_ms_(100.00%)_Space_41.1_MB_(95.65%)
55

6-
import java.util.Stack
7-
86
class Solution {
97
fun combine(n: Int, k: Int): List<List<Int>> {
108
val ans: MutableList<List<Int>> = ArrayList()
119
// Boundary case
1210
if (n > 20 || k < 1 || k > n) {
1311
return ans
1412
}
15-
backtrack(ans, n, k, 1, Stack())
13+
backtrack(ans, n, k, 1, ArrayDeque())
1614
return ans
1715
}
1816

19-
private fun backtrack(ans: MutableList<List<Int>>, n: Int, k: Int, s: Int, stack: Stack<Int>) {
17+
private fun backtrack(ans: MutableList<List<Int>>, n: Int, k: Int, s: Int, stack: ArrayDeque<Int>) {
2018
// Base case
2119
// If k becomes 0
2220
if (k == 0) {
@@ -25,10 +23,10 @@ class Solution {
2523
}
2624
// Start with s till n-k+1
2725
for (i in s..n - k + 1) {
28-
stack.push(i)
26+
stack.addLast(i)
2927
// Update start for recursion and decrease k by 1
3028
backtrack(ans, n, k - 1, i + 1, stack)
31-
stack.pop()
29+
stack.removeLast()
3230
}
3331
}
3432
}

src/main/kotlin/g0101_0200/s0144_binary_tree_preorder_traversal/Solution.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package g0101_0200.s0144_binary_tree_preorder_traversal
44
// #Udemy_Tree_Stack_Queue #2022_10_09_Time_277_ms_(37.90%)_Space_34.2_MB_(82.19%)
55

66
import com_github_leetcode.TreeNode
7-
import java.util.Stack
87

98
/*
109
* Example:
@@ -22,15 +21,15 @@ class Solution {
2221
if (root == null) {
2322
return result
2423
}
25-
val stack: Stack<TreeNode> = Stack<TreeNode>()
24+
val stack: ArrayDeque<TreeNode?> = ArrayDeque()
2625
var current: TreeNode? = root
2726
while (current != null || stack.isNotEmpty()) {
2827
while (current != null) {
2928
result.add(current.`val`)
30-
stack.push(current.right)
29+
stack.addLast(current.right)
3130
current = current.left
3231
}
33-
current = stack.pop()
32+
current = stack.removeLast()
3433
}
3534
return result
3635
}

src/main/kotlin/g0101_0200/s0155_min_stack/MinStack.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,31 +4,28 @@ package g0101_0200.s0155_min_stack
44
// #Data_Structure_II_Day_14_Stack_Queue #Programming_Skills_II_Day_18 #Level_2_Day_16_Design
55
// #Udemy_Design #2022_09_06_Time_331_ms_(84.88%)_Space_54.3_MB_(46.34%)
66

7-
import java.util.Stack
8-
97
class MinStack() {
10-
private val stack: Stack<Pair<Int, Int>> = Stack()
8+
private val stack: ArrayDeque<Pair<Int, Int>> = ArrayDeque()
119

1210
fun push(x: Int) {
1311
val min: Int = if (stack.isEmpty()) x
1412
else getMin()
15-
16-
stack.push(x to minOf(min, x))
13+
stack.addLast(x to minOf(min, x))
1714
}
1815

1916
fun pop() {
20-
stack.pop()
17+
stack.removeLast()
2118
}
2219

2320
fun top(): Int {
2421
return stack
25-
.peek()
22+
.last()
2623
.first
2724
}
2825

2926
fun getMin(): Int {
3027
return stack
31-
.peek()
28+
.last()
3229
.second
3330
}
3431
}

src/main/kotlin/g0701_0800/s0770_basic_calculator_iv/Solution.kt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package g0701_0800.s0770_basic_calculator_iv
44
// #2023_03_10_Time_222_ms_(100.00%)_Space_39.2_MB_(100.00%)
55

66
import java.util.Collections
7-
import java.util.Stack
87

98
class Solution {
109
internal inner class Node {
@@ -126,10 +125,10 @@ class Solution {
126125
return 0
127126
}
128127

129-
private fun helper(numS: Stack<Node>, ops: Stack<Char>): Node {
130-
val b = numS.pop()
131-
val a = numS.pop()
132-
val op = ops.pop()
128+
private fun helper(numS: ArrayDeque<Node>, ops: ArrayDeque<Char>): Node {
129+
val b = numS.removeLast()
130+
val a = numS.removeLast()
131+
val op = ops.removeLast()
133132
if (op == '*') {
134133
return a.mul(b)
135134
} else if (op == '+') {
@@ -148,8 +147,8 @@ class Solution {
148147
vars[evalvarS[i]] = evalintS[i]
149148
}
150149
val n = expression.length
151-
val numS = Stack<Node>()
152-
val ops = Stack<Char>()
150+
val numS = ArrayDeque<Node>()
151+
val ops = ArrayDeque<Char>()
153152
var i = 0
154153
while (i < n) {
155154
val a = expression[i]
@@ -162,12 +161,12 @@ class Solution {
162161
} else if (a == '(') {
163162
ops.add(a)
164163
} else if (a == ')') {
165-
while (ops.peek() != '(') {
164+
while (ops.last() != '(') {
166165
numS.add(helper(numS, ops))
167166
}
168-
ops.pop()
167+
ops.removeLast()
169168
} else if (a == '+' || a == '-' || a == '*') {
170-
while (ops.isNotEmpty() && getPriority(ops.peek()) >= getPriority(a)) {
169+
while (ops.isNotEmpty() && getPriority(ops.last()) >= getPriority(a)) {
171170
numS.add(helper(numS, ops))
172171
}
173172
ops.add(a)
@@ -177,6 +176,6 @@ class Solution {
177176
while (ops.isNotEmpty()) {
178177
numS.add(helper(numS, ops))
179178
}
180-
return numS.peek().evaluate(vars).toList()
179+
return numS.last().evaluate(vars).toList()
181180
}
182181
}

src/main/kotlin/g1101_1200/s1172_dinner_plate_stacks/DinnerPlates.kt

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,10 @@ package g1101_1200.s1172_dinner_plate_stacks
33
// #Hard #Hash_Table #Stack #Design #Heap_Priority_Queue
44
// #2023_05_25_Time_1160_ms_(50.00%)_Space_177.1_MB_(50.00%)
55

6-
import java.util.Stack
76
import java.util.TreeSet
87

98
class DinnerPlates(private val stackCap: Int) {
10-
private val stacks: MutableList<Stack<Int>>
9+
private val stacks: MutableList<ArrayDeque<Int>>
1110
private val leftIndex: TreeSet<Int>
1211

1312
init {
@@ -18,17 +17,17 @@ class DinnerPlates(private val stackCap: Int) {
1817
fun push(`val`: Int) {
1918
if (leftIndex.isNotEmpty()) {
2019
val i = leftIndex.first()
21-
stacks[i].push(`val`)
20+
stacks[i].addLast(`val`)
2221
if (stacks[i].size == stackCap) {
2322
leftIndex.remove(i)
2423
}
2524
return
2625
}
2726
if (stacks.isEmpty() || stacks[stacks.size - 1].size == stackCap) {
28-
val newStack = Stack<Int>()
27+
val newStack = ArrayDeque<Int>()
2928
stacks.add(newStack)
3029
}
31-
stacks[stacks.size - 1].push(`val`)
30+
stacks[stacks.size - 1].addLast(`val`)
3231
}
3332

3433
fun pop(): Int {
@@ -39,7 +38,7 @@ class DinnerPlates(private val stackCap: Int) {
3938
leftIndex.remove(stacks.size - 1)
4039
stacks.removeAt(stacks.size - 1)
4140
}
42-
val `val` = stacks[stacks.size - 1].pop()
41+
val `val` = stacks[stacks.size - 1].removeLast()
4342
if (stacks[stacks.size - 1].isEmpty()) {
4443
leftIndex.remove(stacks.size - 1)
4544
stacks.removeAt(stacks.size - 1)
@@ -51,7 +50,7 @@ class DinnerPlates(private val stackCap: Int) {
5150
if (stacks.size - 1 >= index) {
5251
var `val` = -1
5352
if (stacks[index].isNotEmpty()) {
54-
`val` = stacks[index].pop()
53+
`val` = stacks[index].removeLast()
5554
}
5655
if (stacks[index].isEmpty() && index == stacks.size - 1) {
5756
leftIndex.remove(stacks.size - 1)

src/main/kotlin/g1401_1500/s1496_path_crossing/Solution.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ package g1401_1500.s1496_path_crossing
22

33
// #Easy #String #Hash_Table #2023_06_13_Time_120_ms_(100.00%)_Space_34.9_MB_(93.33%)
44

5-
import java.util.Stack
6-
75
class Solution {
86
fun isPathCrossing(path: String): Boolean {
9-
val visited = Stack<Coord>()
7+
val visited = ArrayDeque<Coord>()
108
visited.add(Coord(0, 0))
119
for (c in path.toCharArray()) {
12-
val last = visited.peek()
10+
val last = visited.last()
1311
if (c == 'N') {
1412
val nextStep = Coord(last.x, last.y + 1)
1513
if (visited.contains(nextStep)) {

src/main/kotlin/g1501_1600/s1544_make_the_string_great/Solution.kt

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@ package g1501_1600.s1544_make_the_string_great
22

33
// #Easy #String #Stack #2023_06_12_Time_164_ms_(92.16%)_Space_34.7_MB_(100.00%)
44

5-
import java.util.Stack
6-
75
class Solution {
86
fun makeGood(s: String): String {
9-
val stack = Stack<Char>()
7+
val stack = ArrayDeque<Char>()
108
for (element in s) {
119
if (stack.isEmpty()) {
1210
stack.add(element)
1311
} else {
14-
if (stack.peek().lowercaseChar() == element.lowercaseChar()) {
15-
if (Character.isLowerCase(stack.peek()) && Character.isUpperCase(element)) {
16-
stack.pop()
17-
} else if (Character.isUpperCase(stack.peek()) && Character.isLowerCase(element)) {
18-
stack.pop()
12+
if (stack.last().lowercaseChar() == element.lowercaseChar()) {
13+
if (Character.isLowerCase(stack.last()) && Character.isUpperCase(element)) {
14+
stack.removeLast()
15+
} else if (Character.isUpperCase(stack.last()) && Character.isLowerCase(element)) {
16+
stack.removeLast()
1917
} else {
2018
stack.add(element)
2119
}
@@ -26,7 +24,7 @@ class Solution {
2624
}
2725
val sb = StringBuilder()
2826
while (stack.isNotEmpty()) {
29-
sb.append(stack.pop())
27+
sb.append(stack.removeLast())
3028
}
3129
return sb.reverse().toString()
3230
}

src/test/kotlin/g1101_1200/s1114_print_in_order/FooTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ internal class FooTest {
1414
Thread { foo.first { fooData[0]++ } }.start()
1515
Thread { foo.second { fooData[0]++ } }.start()
1616
Thread { foo.third { fooData[0]++ } }.start()
17-
TimeUnit.MILLISECONDS.sleep(800)
17+
TimeUnit.MILLISECONDS.sleep(1000)
1818
assertThat(fooData[0], equalTo(3))
1919
}
2020
}

0 commit comments

Comments
 (0)