Skip to content

Commit 414e64c

Browse files
committed
Updated tags
1 parent c7c9851 commit 414e64c

File tree

8 files changed

+83
-90
lines changed
  • src/main/kotlin
    • g3401_3500
    • g3501_3600
      • s3501_maximize_active_section_with_trade_ii
      • s3502_minimum_cost_to_reach_every_position
      • s3503_longest_palindrome_after_substring_concatenation_i
      • s3504_longest_palindrome_after_substring_concatenation_ii
      • s3505_minimum_operations_to_make_elements_within_k_subarrays_equal

8 files changed

+83
-90
lines changed

src/main/kotlin/g3401_3500/s3498_reverse_degree_of_a_string/Solution.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3401_3500.s3498_reverse_degree_of_a_string
22

3-
// #Easy #2025_03_30_Time_1_ms_(100.00%)_Space_42.68_MB_(100.00%)
3+
// #Easy #String #Simulation #2025_04_01_Time_2_ms_(87.18%)_Space_42.65_MB_(89.74%)
44

55
class Solution {
66
fun reverseDegree(s: String): Int {

src/main/kotlin/g3401_3500/s3499_maximize_active_section_with_trade_i/Solution.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package g3401_3500.s3499_maximize_active_section_with_trade_i
22

3-
// #Medium #2025_03_30_Time_45_ms_(100.00%)_Space_49.16_MB_(100.00%)
3+
// #Medium #String #Enumeration #2025_04_01_Time_52_ms_(73.08%)_Space_47.99_MB_(100.00%)
44

55
import kotlin.math.max
66

Original file line numberDiff line numberDiff line change
@@ -1,73 +1,26 @@
11
package g3401_3500.s3500_minimum_cost_to_divide_array_into_subarrays
22

3-
// #Hard #2025_03_30_Time_200_ms_(100.00%)_Space_88.62_MB_(_%)
3+
// #Hard #Array #Dynamic_Programming #Prefix_Sum
4+
// #2025_04_01_Time_28_ms_(92.31%)_Space_49.69_MB_(69.23%)
45

56
class Solution {
67
fun minimumCost(nums: IntArray, cost: IntArray, k: Int): Long {
78
val n = nums.size
8-
val prefixNums = LongArray(n)
9-
var total: Long = 0
10-
for (i in 0..<n) {
11-
total += nums[i].toLong()
12-
prefixNums[i] = total
9+
val k = k.toLong()
10+
val preNums = LongArray(n + 1)
11+
val preCost = LongArray(n + 1)
12+
for (i in 0..n - 1) {
13+
preNums[i + 1] = preNums[i] + nums[i]
14+
preCost[i + 1] = preCost[i] + cost[i]
1315
}
14-
val prefixCost = LongArray(n + 1)
15-
total = 0
16-
for (i in 0..<n) {
17-
total += cost[i].toLong()
18-
prefixCost[i + 1] = total
16+
val dp = LongArray(n + 1) {
17+
Long.MAX_VALUE / 2
18+
}.also { it[0] = 0L }
19+
for (r in 1..n) for (l in 0..r - 1) {
20+
val sumNums = preNums[r] * (preCost[r] - preCost[l])
21+
val sumCost = k * (preCost[n] - preCost[l])
22+
dp[r] = minOf(dp[r], dp[l] + sumNums + sumCost)
1923
}
20-
val memo: Array<LongArray> = Array<LongArray>(n) { LongArray(n + 1) }
21-
for (row in memo) {
22-
row.fill(-1)
23-
}
24-
val bestSplit = IntArray(n)
25-
bestSplit.fill(-1)
26-
return rec(0, 1, nums, prefixNums, prefixCost, k, memo, bestSplit)
27-
}
28-
29-
private fun rec(
30-
index: Int,
31-
i: Int,
32-
nums: IntArray,
33-
prefixNums: LongArray,
34-
prefixCost: LongArray,
35-
k: Int,
36-
memo: Array<LongArray>,
37-
bestSplit: IntArray,
38-
): Long {
39-
val n = nums.size
40-
if (index == n) {
41-
return 0
42-
}
43-
if (memo[index][i] != -1L) {
44-
return memo[index][i]
45-
}
46-
if (bestSplit[index] != -1) {
47-
val j = bestSplit[index]
48-
val `val` =
49-
(
50-
(prefixNums[j] + k.toLong() * i) * (prefixCost[j + 1] - prefixCost[index]) +
51-
rec(j + 1, i + 1, nums, prefixNums, prefixCost, k, memo, bestSplit)
52-
)
53-
memo[index][i] = `val`
54-
return `val`
55-
}
56-
var best = Long.Companion.MAX_VALUE
57-
var bestIndex = -1
58-
for (j in index..<n) {
59-
val `val` =
60-
(
61-
(prefixNums[j] + k.toLong() * i) * (prefixCost[j + 1] - prefixCost[index]) +
62-
rec(j + 1, i + 1, nums, prefixNums, prefixCost, k, memo, bestSplit)
63-
)
64-
if (`val` < best) {
65-
best = `val`
66-
bestIndex = j
67-
}
68-
}
69-
bestSplit[index] = bestIndex
70-
memo[index][i] = best
71-
return best
24+
return dp[n]
7225
}
7326
}

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

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

3-
// #Hard #2025_03_30_Time_219_ms_(100.00%)_Space_142.64_MB_(100.00%)
3+
// #Hard #Array #String #Binary_Search #Segment_Tree
4+
// #2025_04_01_Time_259_ms_(100.00%)_Space_140.14_MB_(_%)
45

56
import kotlin.math.max
67

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

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

3-
// #Easy #2025_03_30_Time_1_ms_(100.00%)_Space_47.23_MB_(86.36%)
3+
// #Easy #Array #2025_04_01_Time_1_ms_(100.00%)_Space_46.62_MB_(96.30%)
44

55
import kotlin.math.min
66

Original file line numberDiff line numberDiff line change
@@ -1,39 +1,76 @@
11
package g3501_3600.s3503_longest_palindrome_after_substring_concatenation_i
22

3-
// #Medium #2025_03_30_Time_206_ms_(66.67%)_Space_47.71_MB_(86.67%)
3+
// #Medium #String #Dynamic_Programming #Two_Pointers #Enumeration
4+
// #2025_04_01_Time_42_ms_(83.33%)_Space_43.01_MB_(100.00%)
45

56
import kotlin.math.max
67

78
class Solution {
89
fun longestPalindrome(s: String, t: String): Int {
9-
var result = 0
10-
for (i in 0..s.length) {
11-
for (j in i..s.length) {
12-
val subStrS = s.substring(i, j)
13-
for (k in 0..t.length) {
14-
for (l in k..t.length) {
15-
val subStrT = t.substring(k, l)
16-
val combineStr = subStrS + subStrT
17-
if (isPalindrome(combineStr)) {
18-
result = max(result, combineStr.length)
10+
var maxLen = 0
11+
maxLen = max(maxLen, longestPalindromicSubstring(s))
12+
maxLen = max(maxLen, longestPalindromicSubstring(t))
13+
val sLen = s.length
14+
val tLen = t.length
15+
for (i in 0..<sLen) {
16+
for (j in i..<sLen) {
17+
val m = j - i + 1
18+
for (k in 0..<tLen) {
19+
for (l in k..<tLen) {
20+
val n = l - k + 1
21+
val totalLength = m + n
22+
if (totalLength <= maxLen) {
23+
continue
24+
}
25+
var isPalindrome = true
26+
for (p in 0..<totalLength / 2) {
27+
val q = totalLength - 1 - p
28+
val c1: Char = if (p < m) {
29+
s[i + p]
30+
} else {
31+
t[k + (p - m)]
32+
}
33+
val c2: Char = if (q < m) {
34+
s[i + q]
35+
} else {
36+
t[k + (q - m)]
37+
}
38+
if (c1 != c2) {
39+
isPalindrome = false
40+
break
41+
}
42+
}
43+
if (isPalindrome) {
44+
maxLen = totalLength
1945
}
2046
}
2147
}
2248
}
2349
}
24-
return result
50+
return maxLen
2551
}
2652

27-
private fun isPalindrome(input: String): Boolean {
28-
var left = 0
29-
var right = input.length - 1
30-
while (left < right) {
31-
if (input.get(left) != input.get(right)) {
32-
return false
53+
private fun longestPalindromicSubstring(str: String): Int {
54+
var max = 0
55+
val len = str.length
56+
for (i in 0..<len) {
57+
for (j in i..<len) {
58+
var isPalin = true
59+
var left = i
60+
var right = j
61+
while (left < right) {
62+
if (str[left] != str[right]) {
63+
isPalin = false
64+
break
65+
}
66+
left++
67+
right--
68+
}
69+
if (isPalin) {
70+
max = max(max, (j - i + 1))
71+
}
3372
}
34-
left++
35-
right--
3673
}
37-
return true
74+
return max
3875
}
3976
}

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

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

3-
// #Hard #2025_03_30_Time_58_ms_(100.00%)_Space_60.00_MB_(50.00%)
3+
// #Hard #String #Dynamic_Programming #Two_Pointers
4+
// #2025_04_01_Time_59_ms_(100.00%)_Space_58.68_MB_(57.14%)
45

56
import kotlin.math.max
67

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

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

3-
// #Hard #2025_03_30_Time_565_ms_(100.00%)_Space_121.62_MB_(_%)
3+
// #Hard #Array #Hash_Table #Dynamic_Programming #Math #Heap_Priority_Queue #Sliding_Window
4+
// #2025_04_01_Time_537_ms_(100.00%)_Space_115.99_MB_(20.00%)
45

56
import java.util.Collections
67
import java.util.PriorityQueue

0 commit comments

Comments
 (0)