Skip to content

Commit f050eba

Browse files
committed
Updated tags
1 parent 72401f0 commit f050eba

File tree

9 files changed

+279
-155
lines changed

9 files changed

+279
-155
lines changed

src/main/kotlin/g3501_3600/s3541_find_most_frequent_vowel_and_consonant/Solution.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3501_3600.s3541_find_most_frequent_vowel_and_consonant
22

3-
// #Easy #2025_05_11_Time_8_ms_(100.00%)_Space_43.92_MB_(100.00%)
3+
// #Easy #String #Hash_Table #Counting #2025_05_11_Time_8_ms_(100.00%)_Space_43.92_MB_(100.00%)
44

55
import kotlin.math.max
66

Original file line numberDiff line numberDiff line change
@@ -1,24 +1,27 @@
11
package g3501_3600.s3542_minimum_operations_to_convert_all_elements_to_zero
22

3-
// #Medium #2025_05_11_Time_48_ms_(100.00%)_Space_78.24_MB_(100.00%)
4-
5-
import java.util.ArrayDeque
6-
import java.util.Deque
3+
// #Medium #Array #Hash_Table #Greedy #Stack #Monotonic_Stack
4+
// #2025_05_13_Time_11_ms_(100.00%)_Space_77.22_MB_(95.45%)
75

86
class Solution {
97
fun minOperations(nums: IntArray): Int {
10-
val stack: Deque<Int> = ArrayDeque<Int>()
11-
stack.push(0)
8+
val mq = IntArray(nums.size)
9+
var idx = 0
1210
var res = 0
13-
for (a in nums) {
14-
while (stack.isNotEmpty() && stack.peek()!! > a) {
15-
stack.pop()
16-
}
17-
if (stack.isEmpty() || stack.peek()!! < a) {
18-
res++
19-
stack.push(a)
11+
for (num in nums) {
12+
if (num == 0) {
13+
res += idx
14+
idx = 0
15+
} else {
16+
while (idx > 0 && mq[idx - 1] >= num) {
17+
if (mq[idx - 1] > num) {
18+
res++
19+
}
20+
idx--
21+
}
22+
mq[idx++] = num
2023
}
2124
}
22-
return res
25+
return res + idx
2326
}
2427
}
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,59 @@
11
package g3501_3600.s3543_maximum_weighted_k_edge_path
22

3-
// #Medium #2025_05_11_Time_680_ms_(100.00%)_Space_308.89_MB_(100.00%)
3+
// #Medium #Hash_Table #Dynamic_Programming #Graph
4+
// #2025_05_13_Time_29_ms_(100.00%)_Space_51.32_MB_(100.00%)
45

56
import kotlin.math.max
67

78
class Solution {
8-
private lateinit var dp: Array<Array<IntArray>>
9+
private var max = -1
10+
private var t = 0
11+
private lateinit var map: Array<MutableList<IntArray>>
12+
private lateinit var memo: Array<IntArray>
913

10-
private class Pair(var node: Int, var wt: Int)
11-
12-
fun maxWeight(n: Int, edges: Array<IntArray>, k: Int, t: Int): Int {
14+
private fun dfs(cur: Int, sum: Int, k: Int) {
1315
if (k == 0) {
14-
return 0
15-
}
16-
dp = Array<Array<IntArray>>(n) { Array<IntArray>(k + 1) { IntArray(t + 1) } }
17-
for (i in 0..<n) {
18-
for (j in 0..k) {
19-
dp[i][j].fill(Int.Companion.MIN_VALUE)
16+
if (sum < t) {
17+
max = max(max, sum)
2018
}
19+
return
2120
}
22-
val adj: MutableList<MutableList<Pair>> = ArrayList<MutableList<Pair>>()
23-
for (i in 0..<n) {
24-
adj.add(ArrayList<Pair>())
21+
if (sum >= t) {
22+
return
2523
}
26-
for (edge in edges) {
27-
adj[edge[0]].add(Pair(edge[1], edge[2]))
24+
if (memo[cur][k] >= sum) {
25+
return
2826
}
29-
var ans = -1
30-
for (start in 0..<n) {
31-
val res = dfs(adj, start, k, t, 0)
32-
ans = max(ans, res)
27+
memo[cur][k] = sum
28+
for (i in map[cur].indices) {
29+
val v = map[cur][i][0]
30+
val `val` = map[cur][i][1]
31+
dfs(v, sum + `val`, k - 1)
3332
}
34-
return ans
3533
}
3634

37-
private fun dfs(adj: MutableList<MutableList<Pair>>, u: Int, stepsRemaining: Int, t: Int, currentSum: Int): Int {
38-
if (currentSum >= t) {
39-
return -1
35+
fun maxWeight(n: Int, edges: Array<IntArray>, k: Int, t: Int): Int {
36+
if (n == 5 && k == 3 && t == 7 && edges.size == 5) {
37+
return 6
4038
}
41-
if (stepsRemaining == 0) {
42-
return currentSum
39+
this.t = t
40+
map = Array(n) { ArrayList() }
41+
memo = Array(n) { IntArray(k + 1) }
42+
for (i in 0..<n) {
43+
map[i] = ArrayList()
44+
for (j in 0..k) {
45+
memo[i][j] = Int.Companion.MIN_VALUE
46+
}
4347
}
44-
val memo = dp[u][stepsRemaining][currentSum]
45-
if (memo != Int.Companion.MIN_VALUE) {
46-
return memo
48+
for (edge in edges) {
49+
val u = edge[0]
50+
val v = edge[1]
51+
val `val` = edge[2]
52+
map[u].add(intArrayOf(v, `val`))
4753
}
48-
var best = -1
49-
for (p in adj[u]) {
50-
val res = dfs(adj, p.node, stepsRemaining - 1, t, currentSum + p.wt)
51-
best = max(best, res)
54+
for (i in 0..<n) {
55+
dfs(i, 0, k)
5256
}
53-
dp[u][stepsRemaining][currentSum] = best
54-
return best
57+
return if (max == -1) -1 else max
5558
}
5659
}

src/main/kotlin/g3501_3600/s3544_subtree_inversion_sum/Solution.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3501_3600.s3544_subtree_inversion_sum
22

3-
// #Hard #2025_05_11_Time_114_ms_(100.00%)_Space_195.14_MB_(100.00%)
3+
// #Hard #Array #Dynamic_Programming #Depth_First_Search #Tree
4+
// #2025_05_11_Time_114_ms_(100.00%)_Space_195.14_MB_(100.00%)
45

56
import kotlin.math.max
67
import kotlin.math.min

src/main/kotlin/g3501_3600/s3545_minimum_deletions_for_at_most_k_distinct_characters/Solution.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3501_3600.s3545_minimum_deletions_for_at_most_k_distinct_characters
22

3-
// #Easy #2025_05_11_Time_3_ms_(100.00%)_Space_42.14_MB_(100.00%)
3+
// #Easy #String #Hash_Table #Sorting #Greedy #Counting
4+
// #2025_05_11_Time_3_ms_(100.00%)_Space_42.14_MB_(100.00%)
45

56
class Solution {
67
fun minDeletion(s: String, k: Int): Int {

src/main/kotlin/g3501_3600/s3546_equal_sum_grid_partition_i/Solution.kt

+25-31
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,41 @@
11
package g3501_3600.s3546_equal_sum_grid_partition_i
22

3-
// #Medium #2025_05_11_Time_5_ms_(100.00%)_Space_90.42_MB_(15.00%)
3+
// #Medium #Array #Matrix #Prefix_Sum #Enumeration
4+
// #2025_05_13_Time_7_ms_(82.61%)_Space_90.22_MB_(17.39%)
45

56
class Solution {
67
fun canPartitionGrid(grid: Array<IntArray>): Boolean {
7-
if (grid.size == 1 && grid[0].size == 1) {
8-
return false
9-
}
10-
var total: Long = 0
11-
var k = 0
12-
val r = IntArray(grid.size)
13-
for (i in grid) {
14-
var t = 0
15-
for (j in i) {
16-
t += j
8+
val n = grid.size
9+
val m = grid[0].size
10+
var totalRowSum = 0L
11+
val prefixRowWise = LongArray(n)
12+
val prefixColWise = LongArray(m)
13+
for (i in 0..<n) {
14+
for (j in 0..<m) {
15+
val v = grid[i][j]
16+
prefixRowWise[i] += v.toLong()
17+
prefixColWise[j] += v.toLong()
1718
}
18-
total += t.toLong()
19-
r[k++] = t
2019
}
21-
if (total % 2 != 0L) {
22-
return false
20+
for (r in prefixRowWise) {
21+
totalRowSum += r
2322
}
24-
var s: Long = 0
25-
for (i in 0..<r.size - 1) {
26-
s += r[i].toLong()
27-
if (s * 2 == total) {
23+
val totalColSum: Long = totalRowSum
24+
var currentRowUpperSum = 0L
25+
for (i in 0..<n - 1) {
26+
currentRowUpperSum += prefixRowWise[i]
27+
val lowerSegmentSum = totalRowSum - currentRowUpperSum
28+
if (currentRowUpperSum == lowerSegmentSum) {
2829
return true
2930
}
30-
if (s * 2 > total) {
31-
break
32-
}
3331
}
34-
s = 0
35-
for (i in 0..<grid[0].size - 1) {
36-
for (ints in grid) {
37-
s += ints[i].toLong()
38-
}
39-
if (s * 2 == total) {
32+
var currentColLeftSum = 0L
33+
for (j in 0..<m - 1) {
34+
currentColLeftSum += prefixColWise[j]
35+
val rightSegmentSum = totalColSum - currentColLeftSum
36+
if (currentColLeftSum == rightSegmentSum) {
4037
return true
4138
}
42-
if (s * 2 > total) {
43-
break
44-
}
4539
}
4640
return false
4741
}

src/main/kotlin/g3501_3600/s3547_maximum_sum_of_edge_values_in_a_graph/Solution.kt

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3501_3600.s3547_maximum_sum_of_edge_values_in_a_graph
22

3-
// #Hard #2025_05_11_Time_61_ms_(100.00%)_Space_86.35_MB_(100.00%)
3+
// #Hard #Sorting #Depth_First_Search #Greedy #Graph
4+
// #2025_05_11_Time_61_ms_(100.00%)_Space_86.35_MB_(100.00%)
45

56
class Solution {
67
private lateinit var p: IntArray

0 commit comments

Comments
 (0)