Skip to content

Commit 99be171

Browse files
committed
Added tags
1 parent 0171d29 commit 99be171

File tree

4 files changed

+67
-49
lines changed
  • src/main/kotlin/g3701_3800
    • s3731_find_missing_elements
    • s3732_maximum_product_of_three_elements_after_one_replacement
    • s3733_minimum_time_to_complete_all_deliveries
    • s3734_lexicographically_smallest_palindromic_permutation_greater_than_target

4 files changed

+67
-49
lines changed

src/main/kotlin/g3701_3800/s3731_find_missing_elements/Solution.kt

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
package g3701_3800.s3731_find_missing_elements
22

3-
// #Easy #Weekly_Contest_474 #2025_11_03_Time_12_ms_(100.00%)_Space_48.81_MB_(11.11%)
3+
// #Easy #Array #Hash_Table #Sorting #Weekly_Contest_474
4+
// #2025_11_05_Time_2_ms_(100.00%)_Space_46.48_MB_(84.44%)
45

56
class Solution {
6-
fun findMissingElements(nums: IntArray): MutableList<Int> {
7+
fun findMissingElements(nums: IntArray): List<Int> {
8+
var maxi = 0
9+
var mini = 101
710
val list: MutableList<Int> = ArrayList()
8-
nums.sort()
9-
for (i in 0..<nums.size - 1) {
10-
if (nums[i + 1] - nums[i] > 1) {
11-
for (j in nums[i] + 1..<nums[i + 1]) {
12-
list.add(j)
13-
}
11+
val array = BooleanArray(101)
12+
for (num in nums) {
13+
array[num] = true
14+
if (maxi < num) {
15+
maxi = num
1416
}
17+
if (mini > num) {
18+
mini = num
19+
}
20+
}
21+
for (index in mini + 1..<maxi) {
22+
if (array[index]) {
23+
continue
24+
}
25+
list.add(index)
1526
}
1627
return list
1728
}

src/main/kotlin/g3701_3800/s3732_maximum_product_of_three_elements_after_one_replacement/Solution.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package g3701_3800.s3732_maximum_product_of_three_elements_after_one_replacement
22

3-
// #Medium #Weekly_Contest_474 #2025_11_03_Time_6_ms_(100.00%)_Space_75.20_MB_(76.92%)
3+
// #Medium #Array #Math #Sorting #Greedy #Weekly_Contest_474
4+
// #2025_11_05_Time_6_ms_(88.00%)_Space_74.51_MB_(84.00%)
45

56
import kotlin.math.abs
67

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,49 @@
11
package g3701_3800.s3733_minimum_time_to_complete_all_deliveries
22

3-
// #Medium #Weekly_Contest_474 #2025_11_03_Time_2_ms_(100.00%)_Space_42.94_MB_(100.00%)
3+
// #Medium #Math #Binary_Search #Weekly_Contest_474
4+
// #2025_11_05_Time_2_ms_(100.00%)_Space_42.47_MB_(100.00%)
45

56
import kotlin.math.max
67

78
class Solution {
8-
private fun func(mid: Long, d: IntArray, r: IntArray): Boolean {
9-
val lcm = r[0].toLong() * r[1] / gcd(r[0].toLong(), r[1].toLong())
10-
val a1 = mid / r[0]
11-
val a2 = mid / r[1]
12-
val a3 = mid / lcm
13-
val b = mid - a1 - a2 + a3
14-
val o1 = a2 - a3
15-
val o2 = a1 - a3
16-
val d0 = max(d[0] - o1, 0)
17-
val d1 = max(d[1] - o2, 0)
18-
return b >= d0 + d1
9+
private fun pos(k: Long, n1: Long, n2: Long, p1: Int, p2: Int, lVal: Long): Boolean {
10+
val kP1 = k / p1
11+
val kP2 = k / p2
12+
val kL = k / lVal
13+
val s1 = kP2 - kL
14+
val s2 = kP1 - kL
15+
val sB = k - kP1 - kP2 + kL
16+
val w1 = max(0L, n1 - s1)
17+
val w2 = max(0L, n2 - s2)
18+
return (w1 + w2) <= sB
1919
}
2020

21-
private fun gcd(a: Long, b: Long): Long {
21+
private fun findGcd(a: Long, b: Long): Long {
2222
if (b == 0L) {
2323
return a
2424
}
25-
return gcd(b, a % b)
25+
return findGcd(b, a % b)
2626
}
2727

2828
fun minimumTime(d: IntArray, r: IntArray): Long {
29-
var lo: Long = 0
30-
var hi = 1e12.toLong()
31-
var ans = Long.MAX_VALUE
29+
val n1 = d[0].toLong()
30+
val n2 = d[1].toLong()
31+
val p1 = r[0]
32+
val p2 = r[1]
33+
val g = findGcd(p1.toLong(), p2.toLong())
34+
val l = p1.toLong() * p2 / g
35+
var lo = n1 + n2
36+
var hi = (n1 + n2) * max(p1, p2)
37+
var res = hi
3238
while (lo <= hi) {
33-
val mid = (lo + hi) / 2
34-
if (func(mid, d, r)) {
35-
ans = mid
39+
val mid = lo + (hi - lo) / 2
40+
if (pos(mid, n1, n2, p1, p2, l)) {
41+
res = mid
3642
hi = mid - 1
3743
} else {
3844
lo = mid + 1
3945
}
4046
}
41-
return ans
47+
return res
4248
}
4349
}

src/main/kotlin/g3701_3800/s3734_lexicographically_smallest_palindromic_permutation_greater_than_target/Solution.kt

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package g3701_3800.s3734_lexicographically_smallest_palindromic_permutation_greater_than_target
22

3-
// #Hard #Weekly_Contest_474 #2025_11_03_Time_12_ms_(100.00%)_Space_47.24_MB_(100.00%)
3+
// #Hard #String #Two_Pointers #Enumeration #Weekly_Contest_474
4+
// #2025_11_05_Time_4_ms_(100.00%)_Space_46.12_MB_(77.78%)
45

56
class Solution {
6-
fun func(i: Int, target: String, ans: CharArray, l: Int, r: Int, freq: IntArray, end: Boolean): Boolean {
7+
private fun func(i: Int, target: String, ans: CharArray, l: Int, r: Int, freq: IntArray, end: Boolean): Boolean {
78
if (l > r) {
89
return String(ans).compareTo(target) > 0
910
}
1011
if (l == r) {
1112
var left = '#'
12-
for (k in 0..25) {
13+
for (k in 0 until 26) {
1314
if (freq[k] > 0) {
1415
left = (k + 'a'.code).toChar()
1516
}
@@ -24,68 +25,67 @@ class Solution {
2425
return false
2526
}
2627
if (end) {
27-
for (j in 0..25) {
28+
for (j in 0 until 26) {
2829
if (freq[j] > 1) {
2930
freq[j] -= 2
30-
ans[r] = (j + 'a'.code).toChar()
31-
ans[l] = ans[r]
31+
val charJ = (j + 'a'.code).toChar()
32+
ans[l] = charJ
33+
ans[r] = charJ
3234
if (func(i + 1, target, ans, l + 1, r - 1, freq, end)) {
3335
return true
3436
}
37+
ans[l] = '#'
3538
ans[r] = '#'
36-
ans[l] = ans[r]
3739
freq[j] += 2
3840
}
3941
}
4042
return false
4143
}
4244
val curr = target[i]
4345
var next = '1'
44-
for (k in target[i].code - 'a'.code + 1..25) {
46+
for (k in (curr.code - 'a'.code + 1) until 26) {
4547
if (freq[k] > 1) {
4648
next = (k + 'a'.code).toChar()
4749
break
4850
}
4951
}
5052
if (freq[curr.code - 'a'.code] > 1) {
53+
ans[l] = curr
5154
ans[r] = curr
52-
ans[l] = ans[r]
5355
freq[curr.code - 'a'.code] -= 2
54-
if (func(i + 1, target, ans, l + 1, r - 1, freq, end)) {
56+
if (func(i + 1, target, ans, l + 1, r - 1, freq, false)) { // end = false
5557
return true
5658
}
5759
freq[curr.code - 'a'.code] += 2
5860
}
5961
if (next != '1') {
62+
ans[l] = next
6063
ans[r] = next
61-
ans[l] = ans[r]
6264
freq[next.code - 'a'.code] -= 2
63-
if (func(i + 1, target, ans, l + 1, r - 1, freq, true)) {
65+
if (func(i + 1, target, ans, l + 1, r - 1, freq, true)) { // end = true
6466
return true
6567
}
66-
freq[next.code - 'a'.code] += 2
6768
}
69+
ans[l] = '#'
6870
ans[r] = '#'
69-
ans[l] = ans[r]
7071
return false
7172
}
7273

7374
fun lexPalindromicPermutation(s: String, target: String): String {
7475
val freq = IntArray(26)
75-
for (i in 0..<s.length) {
76-
freq[s[i].code - 'a'.code]++
76+
for (char in s) {
77+
freq[char.code - 'a'.code]++
7778
}
7879
var oddc = 0
79-
for (i in 0..25) {
80+
for (i in 0 until 26) {
8081
if (freq[i] % 2 == 1) {
8182
oddc++
8283
}
8384
}
8485
if (oddc > 1) {
8586
return ""
8687
}
87-
val ans = CharArray(s.length)
88-
ans.fill('#')
88+
val ans = CharArray(s.length) { '#' }
8989
if (func(0, target, ans, 0, s.length - 1, freq, false)) {
9090
return String(ans)
9191
}

0 commit comments

Comments
 (0)