Medium
You are given an integer array groups
, where groups[i]
represents the size of the ith
group. You are also given an integer array elements
.
Your task is to assign one element to each group based on the following rules:
j
can be assigned to a group i
if groups[i]
is divisible by elements[j]
.j
.Return an integer array assigned
, where assigned[i]
is the index of the element chosen for group i
, or -1 if no suitable element exists.
Note: An element may be assigned to more than one group.
Example 1:
Input: groups = [8,4,3,2,4], elements = [4,2]
Output: [0,0,-1,1,0]
Explanation:
elements[0] = 4
is assigned to groups 0, 1, and 4.elements[1] = 2
is assigned to group 3.Example 2:
Input: groups = [2,3,5,7], elements = [5,3,3]
Output: [-1,1,0,-1]
Explanation:
elements[1] = 3
is assigned to group 1.elements[0] = 5
is assigned to group 2.Example 3:
Input: groups = [10,21,30,41], elements = [2,1]
Output: [0,1,0,1]
Explanation:
elements[0] = 2
is assigned to the groups with even values, and elements[1] = 1
is assigned to the groups with odd values.
Constraints:
1 <= groups.length <= 105
1 <= elements.length <= 105
1 <= groups[i] <= 105
1 <= elements[i] <= 105
import kotlin.math.max
class Solution {
fun assignElements(groups: IntArray, elements: IntArray): IntArray {
var j: Int
var maxi = 0
var i = 0
while (i < groups.size) {
maxi = max(maxi, groups[i])
i++
}
val n = maxi + 1
val arr = IntArray(n)
val ans = IntArray(groups.size)
arr.fill(-1)
i = 0
while (i < elements.size) {
if (elements[i] < n && arr[elements[i]] == -1) {
j = elements[i]
while (j < n) {
if (arr[j] == -1) {
arr[j] = i
}
j += elements[i]
}
}
i++
}
i = 0
while (i < groups.size) {
ans[i] = arr[groups[i]]
i++
}
return ans
}
}