Skip to content

Commit ff24479

Browse files
committed
Improved tasks 3366-3395
1 parent 1898369 commit ff24479

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/readme.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -69,13 +69,13 @@ class Solution {
6969
op2--
7070
}
7171
}
72-
val count: MutableMap<Int?, Int?> = HashMap<Int?, Int?>()
72+
val count: MutableMap<Int, Int> = HashMap<Int, Int>()
7373
var odd = 0
7474
for (i in low..<high) {
7575
if (op2 > 0) {
7676
nums[i] -= k
7777
if (k % 2 > 0 && nums[i] % 2 > 0) {
78-
count.merge(nums[i], 1) { a: Int?, b: Int? -> Integer.sum(a!!, b!!) }
78+
count.merge(nums[i], 1) { a: Int, b: Int -> Integer.sum(a, b) }
7979
}
8080
op2--
8181
} else {
@@ -89,8 +89,8 @@ class Solution {
8989
while (i < high && odd > 0) {
9090
val x = nums[i]
9191
if (count.containsKey(x)) {
92-
if (count.merge(x, -1) { a: Int?, b: Int? ->
93-
Integer.sum(a!!, b!!)
92+
if (count.merge(x, -1) { a: Int, b: Int ->
93+
Integer.sum(a, b)
9494
} == 0
9595
) {
9696
count.remove(x)

src/main/kotlin/g3301_3400/s3372_maximize_the_number_of_target_nodes_after_connecting_trees_i/readme.md

+23-26
Original file line numberDiff line numberDiff line change
@@ -62,70 +62,67 @@ For every `i`, connect node `i` of the first tree with any node of the second tr
6262
import kotlin.math.max
6363

6464
class Solution {
65-
private fun getGraph(edges: Array<IntArray>): Array<ArrayList<Int?>?> {
65+
private fun getGraph(edges: Array<IntArray>): Array<ArrayList<Int>> {
6666
val n = edges.size + 1
67-
val graph: Array<ArrayList<Int?>?> = arrayOfNulls<ArrayList<Int?>?>(n)
68-
for (i in 0..<n) {
69-
graph[i] = ArrayList<Int?>()
70-
}
67+
val graph: Array<ArrayList<Int>> = Array<ArrayList<Int>>(n) { ArrayList<Int>() }
7168
for (edge in edges) {
7269
val u = edge[0]
7370
val v = edge[1]
74-
graph[u]!!.add(v)
75-
graph[v]!!.add(u)
71+
graph[u].add(v)
72+
graph[v].add(u)
7673
}
7774
return graph
7875
}
7976

80-
private fun dfs(graph: Array<ArrayList<Int?>?>, u: Int, pt: Int, dp: Array<IntArray?>, k: Int) {
81-
for (v in graph[u]!!) {
77+
private fun dfs(graph: Array<ArrayList<Int>>, u: Int, pt: Int, dp: Array<IntArray>, k: Int) {
78+
for (v in graph[u]) {
8279
if (v == pt) {
8380
continue
8481
}
85-
dfs(graph, v!!, u, dp, k)
82+
dfs(graph, v, u, dp, k)
8683
for (i in 0..<k) {
87-
dp[u]!![i + 1] += dp[v]!![i]
84+
dp[u][i + 1] += dp[v][i]
8885
}
8986
}
90-
dp[u]!![0] = dp[u]!![0] + 1
87+
dp[u][0] = dp[u][0] + 1
9188
}
9289

9390
private fun dfs2(
94-
graph: Array<ArrayList<Int?>?>,
91+
graph: Array<ArrayList<Int>>,
9592
u: Int,
9693
pt: Int,
9794
ptv: IntArray,
98-
fdp: Array<IntArray?>,
99-
dp: Array<IntArray?>,
95+
fdp: Array<IntArray>,
96+
dp: Array<IntArray>,
10097
k: Int,
10198
) {
102-
fdp[u]!![0] = dp[u]!![0]
99+
fdp[u][0] = dp[u][0]
103100
for (i in 1..k) {
104-
fdp[u]!![i] = (dp[u]!![i] + ptv[i - 1])
101+
fdp[u][i] = (dp[u][i] + ptv[i - 1])
105102
}
106-
for (v in graph[u]!!) {
103+
for (v in graph[u]) {
107104
if (v == pt) {
108105
continue
109106
}
110107
val nptv = IntArray(k + 1)
111108
for (i in 0..<k) {
112-
nptv[i + 1] = dp[u]!![i + 1] - dp[v!!]!![i] + ptv[i]
109+
nptv[i + 1] = dp[u][i + 1] - dp[v][i] + ptv[i]
113110
}
114111
nptv[0] = 1
115-
dfs2(graph, v!!, u, nptv, fdp, dp, k)
112+
dfs2(graph, v, u, nptv, fdp, dp, k)
116113
}
117114
}
118115

119-
private fun get(edges: Array<IntArray>, k: Int): Array<IntArray?> {
116+
private fun get(edges: Array<IntArray>, k: Int): Array<IntArray> {
120117
val graph = getGraph(edges)
121118
val n = graph.size
122-
val dp = Array<IntArray?>(n) { IntArray(k + 1) }
123-
val fdp = Array<IntArray?>(n) { IntArray(k + 1) }
119+
val dp = Array<IntArray>(n) { IntArray(k + 1) }
120+
val fdp = Array<IntArray>(n) { IntArray(k + 1) }
124121
dfs(graph, 0, -1, dp, k)
125122
dfs2(graph, 0, -1, IntArray(k + 1), fdp, dp, k)
126123
for (i in 0..<n) {
127124
for (j in 1..k) {
128-
fdp[i]!![j] += fdp[i]!![j - 1]
125+
fdp[i][j] += fdp[i][j - 1]
129126
}
130127
}
131128
return fdp
@@ -141,12 +138,12 @@ class Solution {
141138
run {
142139
var i = 0
143140
while (k != 0 && i < m) {
144-
max = max(max.toDouble(), b[i]!![k - 1].toDouble()).toInt()
141+
max = max(max.toDouble(), b[i][k - 1].toDouble()).toInt()
145142
i++
146143
}
147144
}
148145
for (i in 0..<n) {
149-
ans[i] = a[i]!![k] + max
146+
ans[i] = a[i][k] + max
150147
}
151148
return ans
152149
}

src/main/kotlin/g3301_3400/s3373_maximize_the_number_of_target_nodes_after_connecting_trees_ii/readme.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -69,22 +69,22 @@ class Solution {
6969
val p2 = parents(g2)
7070
val eo2 = IntArray(2)
7171
for (i in 0..<m) {
72-
eo2[p2[2]!![i] % 2]++
72+
eo2[p2[2][i] % 2]++
7373
}
7474
val max = max(eo2[0], eo2[1])
7575
val p1 = parents(g1)
7676
val eo1 = IntArray(2)
7777
for (i in 0..<n) {
78-
eo1[p1[2]!![i] % 2]++
78+
eo1[p1[2][i] % 2]++
7979
}
8080
val ans = IntArray(n)
8181
for (i in 0..<n) {
82-
ans[i] = eo1[p1[2]!![i] % 2] + max
82+
ans[i] = eo1[p1[2][i] % 2] + max
8383
}
8484
return ans
8585
}
8686

87-
private fun parents(g: Array<IntArray?>): Array<IntArray?> {
87+
private fun parents(g: Array<IntArray>): Array<IntArray> {
8888
val n = g.size
8989
val par = IntArray(n)
9090
par.fill(-1)
@@ -96,7 +96,7 @@ class Solution {
9696
var r = 1
9797
while (p < r) {
9898
val cur = q[p]
99-
for (nex in g[cur]!!) {
99+
for (nex in g[cur]) {
100100
if (par[cur] != nex) {
101101
q[r++] = nex
102102
par[nex] = cur
@@ -105,11 +105,11 @@ class Solution {
105105
}
106106
p++
107107
}
108-
return arrayOf<IntArray?>(par, q, depth)
108+
return arrayOf<IntArray>(par, q, depth)
109109
}
110110

111-
private fun packU(n: Int, ft: Array<IntArray>): Array<IntArray?> {
112-
val g = arrayOfNulls<IntArray>(n)
111+
private fun packU(n: Int, ft: Array<IntArray>): Array<IntArray> {
112+
val g = Array<IntArray>(n) { IntArray(0) }
113113
val p = IntArray(n)
114114
for (u in ft) {
115115
p[u[0]]++
@@ -119,8 +119,8 @@ class Solution {
119119
g[i] = IntArray(p[i])
120120
}
121121
for (u in ft) {
122-
g[u[0]]!![--p[u[0]]] = u[1]
123-
g[u[1]]!![--p[u[1]]] = u[0]
122+
g[u[0]][--p[u[0]]] = u[1]
123+
g[u[1]][--p[u[1]]] = u[0]
124124
}
125125
return g
126126
}

src/main/kotlin/g3301_3400/s3375_minimum_operations_to_make_array_values_equal_to_k/readme.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,13 @@ The operations can be performed using valid integers in the order 7, 5, 3, and 1
5959
```kotlin
6060
class Solution {
6161
fun minOperations(nums: IntArray, k: Int): Int {
62-
val s: MutableSet<Int?> = HashSet<Int?>()
62+
val s: MutableSet<Int> = HashSet<Int>()
6363
for (i in nums) {
6464
s.add(i)
6565
}
6666
var res = 0
6767
for (i in s) {
68-
if (i!! > k) {
68+
if (i > k) {
6969
res++
7070
} else if (i < k) {
7171
return -1

src/main/kotlin/g3301_3400/s3380_maximum_area_rectangle_with_point_constraints_i/readme.md

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

6767
class Solution {
6868
fun maxRectangleArea(points: Array<IntArray>): Int {
69-
val set: MutableSet<String?> = HashSet<String?>()
69+
val set: MutableSet<String> = HashSet<String>()
7070
for (p in points) {
7171
set.add(p.contentToString())
7272
}

src/main/kotlin/g3301_3400/s3382_maximum_area_rectangle_with_point_constraints_ii/readme.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -70,8 +70,8 @@ class Solution {
7070
}
7171
val pair = xCoord.zip(yCoord) { x, y -> Pair(x, y) }.toTypedArray()
7272
pair.sort()
73-
val map = HashMap<Int?, Pair>()
74-
val yVals = TreeSet<Int?>()
73+
val map = HashMap<Int, Pair>()
74+
val yVals = TreeSet<Int>()
7575
var best: Long = -1
7676
for (i in 0..<pair.size - 1) {
7777
if (yVals.isNotEmpty()) {

src/main/kotlin/g3301_3400/s3387_maximize_amount_after_two_days_of_conversions/readme.md

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

8080
class Solution {
8181
private var res = 0.0
82-
private var map1: MutableMap<String, MutableList<Pair>>? = null
83-
private var map2: MutableMap<String, MutableList<Pair>>? = null
82+
private lateinit var map1: MutableMap<String, MutableList<Pair>>
83+
private lateinit var map2: MutableMap<String, MutableList<Pair>>
8484

8585
private class Pair(var tarcurr: String, var rate: Double)
8686

@@ -98,9 +98,9 @@ class Solution {
9898
}
9999
}
100100
val list: MutableList<Pair> = if (day == 1) {
101-
map1!!.getOrDefault(currCurrency, ArrayList<Pair>())
101+
map1.getOrDefault(currCurrency, ArrayList<Pair>())
102102
} else {
103-
map2!!.getOrDefault(currCurrency, ArrayList<Pair>())
103+
map2.getOrDefault(currCurrency, ArrayList<Pair>())
104104
}
105105
for (p in list) {
106106
if (used.add(p.tarcurr)) {
@@ -127,28 +127,28 @@ class Solution {
127127
val curr = pairs1[i]
128128
val c1 = curr[0]
129129
val c2 = curr[1]
130-
if (!map1!!.containsKey(c1)) {
131-
map1!!.put(c1, ArrayList<Pair>())
130+
if (!map1.containsKey(c1)) {
131+
map1.put(c1, ArrayList<Pair>())
132132
}
133-
map1!![c1]!!.add(Pair(c2, rates1[i]))
134-
if (!map1!!.containsKey(c2)) {
135-
map1!!.put(c2, ArrayList<Pair>())
133+
map1[c1]!!.add(Pair(c2, rates1[i]))
134+
if (!map1.containsKey(c2)) {
135+
map1.put(c2, ArrayList<Pair>())
136136
}
137-
map1!![c2]!!.add(Pair(c1, 1.0 / rates1[i]))
137+
map1[c2]!!.add(Pair(c1, 1.0 / rates1[i]))
138138
}
139139
size = pairs2.size
140140
for (i in 0..<size) {
141141
val curr = pairs2[i]
142142
val c1 = curr[0]
143143
val c2 = curr[1]
144-
if (!map2!!.containsKey(c1)) {
145-
map2!!.put(c1, ArrayList<Pair>())
144+
if (!map2.containsKey(c1)) {
145+
map2.put(c1, ArrayList<Pair>())
146146
}
147-
map2!![c1]!!.add(Pair(c2, rates2[i]))
148-
if (!map2!!.containsKey(c2)) {
149-
map2!!.put(c2, ArrayList<Pair>())
147+
map2[c1]!!.add(Pair(c2, rates2[i]))
148+
if (!map2.containsKey(c2)) {
149+
map2.put(c2, ArrayList<Pair>())
150150
}
151-
map2!![c2]!!.add(Pair(c1, 1.0 / rates2[i]))
151+
map2[c2]!!.add(Pair(c1, 1.0 / rates2[i]))
152152
}
153153
res = 1.0
154154
solve(initialCurrency, 1.0, initialCurrency, 1, HashSet<String?>())

src/main/kotlin/g3301_3400/s3395_subsequences_with_a_unique_middle_mode_i/readme.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -60,16 +60,16 @@ class Solution {
6060

6161
fun subsequencesWithMiddleMode(nums: IntArray): Int {
6262
if (c2[2] == 0L) {
63+
c2[0] = 0
6364
c2[1] = 0
64-
c2[0] = c2[1]
6565
c2[2] = 1
6666
for (i in 3..<c2.size) {
6767
c2[i] = (i * (i - 1) / 2).toLong()
6868
}
6969
}
7070
val n = nums.size
7171
val newNums = IntArray(n)
72-
val map: MutableMap<Int?, Int?> = HashMap<Int?, Int?>(n)
72+
val map: MutableMap<Int, Int> = HashMap<Int, Int>(n)
7373
var m = 0
7474
var index = 0
7575
for (x in nums) {
@@ -122,7 +122,7 @@ class Solution {
122122
}
123123

124124
companion object {
125-
private val MOD = 1e9.toInt() + 7
125+
private const val MOD = 1e9.toInt() + 7
126126
}
127127
}
128128
```

0 commit comments

Comments
 (0)