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 <= 1051 <= elements.length <= 1051 <= groups[i] <= 1051 <= elements[i] <= 105import java.util.Arrays;
public class Solution {
public int[] assignElements(int[] groups, int[] elements) {
int i;
int j;
int maxi = 0;
for (i = 0; i < groups.length; i++) {
maxi = Math.max(maxi, groups[i]);
}
int n = maxi + 1;
int[] arr = new int[n];
int[] ans = new int[groups.length];
Arrays.fill(arr, -1);
for (i = 0; i < elements.length; i++) {
if (elements[i] < n && arr[elements[i]] == -1) {
for (j = elements[i]; j < n; j += elements[i]) {
if (arr[j] == -1) {
arr[j] = i;
}
}
}
}
for (i = 0; i < groups.length; i++) {
ans[i] = arr[groups[i]];
}
return ans;
}
}