Skip to content

Commit e439a0a

Browse files
authored
Improved tasks 3366, 3372, 3373, 3375, 3380, 3382, 3387, 3395
1 parent 25aa049 commit e439a0a

File tree

8 files changed

+61
-64
lines changed
  • src/main/kotlin/g3301_3400
    • s3366_minimum_array_sum
    • s3372_maximize_the_number_of_target_nodes_after_connecting_trees_i
    • s3373_maximize_the_number_of_target_nodes_after_connecting_trees_ii
    • s3375_minimum_operations_to_make_array_values_equal_to_k
    • s3380_maximum_area_rectangle_with_point_constraints_i
    • s3382_maximum_area_rectangle_with_point_constraints_ii
    • s3387_maximize_amount_after_two_days_of_conversions
    • s3395_subsequences_with_a_unique_middle_mode_i

8 files changed

+61
-64
lines changed

src/main/kotlin/g3301_3400/s3366_minimum_array_sum/Solution.kt

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ class Solution {
2020
op2--
2121
}
2222
}
23-
val count: MutableMap<Int?, Int?> = HashMap<Int?, Int?>()
23+
val count: MutableMap<Int, Int> = HashMap<Int, Int>()
2424
var odd = 0
2525
for (i in low..<high) {
2626
if (op2 > 0) {
2727
nums[i] -= k
2828
if (k % 2 > 0 && nums[i] % 2 > 0) {
29-
count.merge(nums[i], 1) { a: Int?, b: Int? -> Integer.sum(a!!, b!!) }
29+
count.merge(nums[i], 1) { a: Int, b: Int -> Integer.sum(a, b) }
3030
}
3131
op2--
3232
} else {
@@ -40,8 +40,8 @@ class Solution {
4040
while (i < high && odd > 0) {
4141
val x = nums[i]
4242
if (count.containsKey(x)) {
43-
if (count.merge(x, -1) { a: Int?, b: Int? ->
44-
Integer.sum(a!!, b!!)
43+
if (count.merge(x, -1) { a: Int, b: Int ->
44+
Integer.sum(a, b)
4545
} == 0
4646
) {
4747
count.remove(x)

src/main/kotlin/g3301_3400/s3372_maximize_the_number_of_target_nodes_after_connecting_trees_i/Solution.kt

+23-26
Original file line numberDiff line numberDiff line change
@@ -6,70 +6,67 @@ package g3301_3400.s3372_maximize_the_number_of_target_nodes_after_connecting_tr
66
import kotlin.math.max
77

88
class Solution {
9-
private fun getGraph(edges: Array<IntArray>): Array<ArrayList<Int?>?> {
9+
private fun getGraph(edges: Array<IntArray>): Array<ArrayList<Int>> {
1010
val n = edges.size + 1
11-
val graph: Array<ArrayList<Int?>?> = arrayOfNulls<ArrayList<Int?>?>(n)
12-
for (i in 0..<n) {
13-
graph[i] = ArrayList<Int?>()
14-
}
11+
val graph: Array<ArrayList<Int>> = Array<ArrayList<Int>>(n) { ArrayList<Int>() }
1512
for (edge in edges) {
1613
val u = edge[0]
1714
val v = edge[1]
18-
graph[u]!!.add(v)
19-
graph[v]!!.add(u)
15+
graph[u].add(v)
16+
graph[v].add(u)
2017
}
2118
return graph
2219
}
2320

24-
private fun dfs(graph: Array<ArrayList<Int?>?>, u: Int, pt: Int, dp: Array<IntArray?>, k: Int) {
25-
for (v in graph[u]!!) {
21+
private fun dfs(graph: Array<ArrayList<Int>>, u: Int, pt: Int, dp: Array<IntArray>, k: Int) {
22+
for (v in graph[u]) {
2623
if (v == pt) {
2724
continue
2825
}
29-
dfs(graph, v!!, u, dp, k)
26+
dfs(graph, v, u, dp, k)
3027
for (i in 0..<k) {
31-
dp[u]!![i + 1] += dp[v]!![i]
28+
dp[u][i + 1] += dp[v][i]
3229
}
3330
}
34-
dp[u]!![0] = dp[u]!![0] + 1
31+
dp[u][0] = dp[u][0] + 1
3532
}
3633

3734
private fun dfs2(
38-
graph: Array<ArrayList<Int?>?>,
35+
graph: Array<ArrayList<Int>>,
3936
u: Int,
4037
pt: Int,
4138
ptv: IntArray,
42-
fdp: Array<IntArray?>,
43-
dp: Array<IntArray?>,
39+
fdp: Array<IntArray>,
40+
dp: Array<IntArray>,
4441
k: Int,
4542
) {
46-
fdp[u]!![0] = dp[u]!![0]
43+
fdp[u][0] = dp[u][0]
4744
for (i in 1..k) {
48-
fdp[u]!![i] = (dp[u]!![i] + ptv[i - 1])
45+
fdp[u][i] = (dp[u][i] + ptv[i - 1])
4946
}
50-
for (v in graph[u]!!) {
47+
for (v in graph[u]) {
5148
if (v == pt) {
5249
continue
5350
}
5451
val nptv = IntArray(k + 1)
5552
for (i in 0..<k) {
56-
nptv[i + 1] = dp[u]!![i + 1] - dp[v!!]!![i] + ptv[i]
53+
nptv[i + 1] = dp[u][i + 1] - dp[v][i] + ptv[i]
5754
}
5855
nptv[0] = 1
59-
dfs2(graph, v!!, u, nptv, fdp, dp, k)
56+
dfs2(graph, v, u, nptv, fdp, dp, k)
6057
}
6158
}
6259

63-
private fun get(edges: Array<IntArray>, k: Int): Array<IntArray?> {
60+
private fun get(edges: Array<IntArray>, k: Int): Array<IntArray> {
6461
val graph = getGraph(edges)
6562
val n = graph.size
66-
val dp = Array<IntArray?>(n) { IntArray(k + 1) }
67-
val fdp = Array<IntArray?>(n) { IntArray(k + 1) }
63+
val dp = Array<IntArray>(n) { IntArray(k + 1) }
64+
val fdp = Array<IntArray>(n) { IntArray(k + 1) }
6865
dfs(graph, 0, -1, dp, k)
6966
dfs2(graph, 0, -1, IntArray(k + 1), fdp, dp, k)
7067
for (i in 0..<n) {
7168
for (j in 1..k) {
72-
fdp[i]!![j] += fdp[i]!![j - 1]
69+
fdp[i][j] += fdp[i][j - 1]
7370
}
7471
}
7572
return fdp
@@ -85,12 +82,12 @@ class Solution {
8582
run {
8683
var i = 0
8784
while (k != 0 && i < m) {
88-
max = max(max.toDouble(), b[i]!![k - 1].toDouble()).toInt()
85+
max = max(max.toDouble(), b[i][k - 1].toDouble()).toInt()
8986
i++
9087
}
9188
}
9289
for (i in 0..<n) {
93-
ans[i] = a[i]!![k] + max
90+
ans[i] = a[i][k] + max
9491
}
9592
return ans
9693
}

src/main/kotlin/g3301_3400/s3373_maximize_the_number_of_target_nodes_after_connecting_trees_ii/Solution.kt

+10-10
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,22 @@ class Solution {
1414
val p2 = parents(g2)
1515
val eo2 = IntArray(2)
1616
for (i in 0..<m) {
17-
eo2[p2[2]!![i] % 2]++
17+
eo2[p2[2][i] % 2]++
1818
}
1919
val max = max(eo2[0], eo2[1])
2020
val p1 = parents(g1)
2121
val eo1 = IntArray(2)
2222
for (i in 0..<n) {
23-
eo1[p1[2]!![i] % 2]++
23+
eo1[p1[2][i] % 2]++
2424
}
2525
val ans = IntArray(n)
2626
for (i in 0..<n) {
27-
ans[i] = eo1[p1[2]!![i] % 2] + max
27+
ans[i] = eo1[p1[2][i] % 2] + max
2828
}
2929
return ans
3030
}
3131

32-
private fun parents(g: Array<IntArray?>): Array<IntArray?> {
32+
private fun parents(g: Array<IntArray>): Array<IntArray> {
3333
val n = g.size
3434
val par = IntArray(n)
3535
par.fill(-1)
@@ -41,7 +41,7 @@ class Solution {
4141
var r = 1
4242
while (p < r) {
4343
val cur = q[p]
44-
for (nex in g[cur]!!) {
44+
for (nex in g[cur]) {
4545
if (par[cur] != nex) {
4646
q[r++] = nex
4747
par[nex] = cur
@@ -50,11 +50,11 @@ class Solution {
5050
}
5151
p++
5252
}
53-
return arrayOf<IntArray?>(par, q, depth)
53+
return arrayOf<IntArray>(par, q, depth)
5454
}
5555

56-
private fun packU(n: Int, ft: Array<IntArray>): Array<IntArray?> {
57-
val g = arrayOfNulls<IntArray>(n)
56+
private fun packU(n: Int, ft: Array<IntArray>): Array<IntArray> {
57+
val g = Array<IntArray>(n) { IntArray(0) }
5858
val p = IntArray(n)
5959
for (u in ft) {
6060
p[u[0]]++
@@ -64,8 +64,8 @@ class Solution {
6464
g[i] = IntArray(p[i])
6565
}
6666
for (u in ft) {
67-
g[u[0]]!![--p[u[0]]] = u[1]
68-
g[u[1]]!![--p[u[1]]] = u[0]
67+
g[u[0]][--p[u[0]]] = u[1]
68+
g[u[1]][--p[u[1]]] = u[0]
6969
}
7070
return g
7171
}

src/main/kotlin/g3301_3400/s3375_minimum_operations_to_make_array_values_equal_to_k/Solution.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ package g3301_3400.s3375_minimum_operations_to_make_array_values_equal_to_k
44

55
class Solution {
66
fun minOperations(nums: IntArray, k: Int): Int {
7-
val s: MutableSet<Int?> = HashSet<Int?>()
7+
val s: MutableSet<Int> = HashSet<Int>()
88
for (i in nums) {
99
s.add(i)
1010
}
1111
var res = 0
1212
for (i in s) {
13-
if (i!! > k) {
13+
if (i > k) {
1414
res++
1515
} else if (i < k) {
1616
return -1

src/main/kotlin/g3301_3400/s3380_maximum_area_rectangle_with_point_constraints_i/Solution.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import kotlin.math.min
88

99
class Solution {
1010
fun maxRectangleArea(points: Array<IntArray>): Int {
11-
val set: MutableSet<String?> = HashSet<String?>()
11+
val set: MutableSet<String> = HashSet<String>()
1212
for (p in points) {
1313
set.add(p.contentToString())
1414
}

src/main/kotlin/g3301_3400/s3382_maximum_area_rectangle_with_point_constraints_ii/Solution.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ class Solution {
1313
}
1414
val pair = xCoord.zip(yCoord) { x, y -> Pair(x, y) }.toTypedArray()
1515
pair.sort()
16-
val map = HashMap<Int?, Pair>()
17-
val yVals = TreeSet<Int?>()
16+
val map = HashMap<Int, Pair>()
17+
val yVals = TreeSet<Int>()
1818
var best: Long = -1
1919
for (i in 0..<pair.size - 1) {
2020
if (yVals.isNotEmpty()) {

src/main/kotlin/g3301_3400/s3387_maximize_amount_after_two_days_of_conversions/Solution.kt

+16-16
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import kotlin.math.max
77

88
class Solution {
99
private var res = 0.0
10-
private var map1: MutableMap<String, MutableList<Pair>>? = null
11-
private var map2: MutableMap<String, MutableList<Pair>>? = null
10+
private lateinit var map1: MutableMap<String, MutableList<Pair>>
11+
private lateinit var map2: MutableMap<String, MutableList<Pair>>
1212

1313
private class Pair(var tarcurr: String, var rate: Double)
1414

@@ -26,9 +26,9 @@ class Solution {
2626
}
2727
}
2828
val list: MutableList<Pair> = if (day == 1) {
29-
map1!!.getOrDefault(currCurrency, ArrayList<Pair>())
29+
map1.getOrDefault(currCurrency, ArrayList<Pair>())
3030
} else {
31-
map2!!.getOrDefault(currCurrency, ArrayList<Pair>())
31+
map2.getOrDefault(currCurrency, ArrayList<Pair>())
3232
}
3333
for (p in list) {
3434
if (used.add(p.tarcurr)) {
@@ -55,28 +55,28 @@ class Solution {
5555
val curr = pairs1[i]
5656
val c1 = curr[0]
5757
val c2 = curr[1]
58-
if (!map1!!.containsKey(c1)) {
59-
map1!!.put(c1, ArrayList<Pair>())
58+
if (!map1.containsKey(c1)) {
59+
map1.put(c1, ArrayList<Pair>())
6060
}
61-
map1!![c1]!!.add(Pair(c2, rates1[i]))
62-
if (!map1!!.containsKey(c2)) {
63-
map1!!.put(c2, ArrayList<Pair>())
61+
map1[c1]!!.add(Pair(c2, rates1[i]))
62+
if (!map1.containsKey(c2)) {
63+
map1.put(c2, ArrayList<Pair>())
6464
}
65-
map1!![c2]!!.add(Pair(c1, 1.0 / rates1[i]))
65+
map1[c2]!!.add(Pair(c1, 1.0 / rates1[i]))
6666
}
6767
size = pairs2.size
6868
for (i in 0..<size) {
6969
val curr = pairs2[i]
7070
val c1 = curr[0]
7171
val c2 = curr[1]
72-
if (!map2!!.containsKey(c1)) {
73-
map2!!.put(c1, ArrayList<Pair>())
72+
if (!map2.containsKey(c1)) {
73+
map2.put(c1, ArrayList<Pair>())
7474
}
75-
map2!![c1]!!.add(Pair(c2, rates2[i]))
76-
if (!map2!!.containsKey(c2)) {
77-
map2!!.put(c2, ArrayList<Pair>())
75+
map2[c1]!!.add(Pair(c2, rates2[i]))
76+
if (!map2.containsKey(c2)) {
77+
map2.put(c2, ArrayList<Pair>())
7878
}
79-
map2!![c2]!!.add(Pair(c1, 1.0 / rates2[i]))
79+
map2[c2]!!.add(Pair(c1, 1.0 / rates2[i]))
8080
}
8181
res = 1.0
8282
solve(initialCurrency, 1.0, initialCurrency, 1, HashSet<String?>())

src/main/kotlin/g3301_3400/s3395_subsequences_with_a_unique_middle_mode_i/Solution.kt

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,16 @@ class Solution {
88

99
fun subsequencesWithMiddleMode(nums: IntArray): Int {
1010
if (c2[2] == 0L) {
11+
c2[0] = 0
1112
c2[1] = 0
12-
c2[0] = c2[1]
1313
c2[2] = 1
1414
for (i in 3..<c2.size) {
1515
c2[i] = (i * (i - 1) / 2).toLong()
1616
}
1717
}
1818
val n = nums.size
1919
val newNums = IntArray(n)
20-
val map: MutableMap<Int?, Int?> = HashMap<Int?, Int?>(n)
20+
val map: MutableMap<Int, Int> = HashMap<Int, Int>(n)
2121
var m = 0
2222
var index = 0
2323
for (x in nums) {
@@ -70,6 +70,6 @@ class Solution {
7070
}
7171

7272
companion object {
73-
private val MOD = 1e9.toInt() + 7
73+
private const val MOD = 1e9.toInt() + 7
7474
}
7575
}

0 commit comments

Comments
 (0)