3760. Assign Elements To Groups With Constraints¶
3760. Assign Elements to Groups with Constraints
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:
- An element
jcan be assigned to a groupiifgroups[i]is divisible byelements[j]. - If there are multiple elements that can be assigned, assign the element with the smallest index
j. - If no element satisfies the condition for a group, assign -1 to that group.
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] = 4is assigned to groups 0, 1, and 4.elements[1] = 2is assigned to group 3.- Group 2 cannot be assigned any element.
Example 2:
Input: groups = [2,3,5,7], elements = [5,3,3]
Output: [-1,1,0,-1]
Explanation:
elements[1] = 3is assigned to group 1.elements[0] = 5is assigned to group 2.- Groups 0 and 3 cannot be assigned any element.
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] <= 105
Solution¶
class Solution {
public int[] assignElements(int[] groups, int[] elements) {
HashMap<Integer, TreeSet<Integer>> map = new HashMap<>();
for (int i = 0; i < elements.length; i++) {
map.putIfAbsent(elements[i], new TreeSet<>());
map.get(elements[i]).add(i);
}
int res[] = new int[groups.length];
for (int k = 0; k < groups.length; k++) {
int current = groups[k];
ArrayList<Integer> div = new ArrayList<>();
int mini = Integer.MAX_VALUE;
for (int i = 1; i * i <= current; i++) {
if (current % i == 0) {
div.add(i);
if (current / i != i) div.add(current / i);
}
}
for (int ele : div) {
if (!map.containsKey(ele)) continue;
mini = Math.min(mini, map.get(ele).first());
}
if (mini == Integer.MAX_VALUE) res[k] = -1;
else res[k] = mini;
}
return res;
}
}
Complexity Analysis¶
- Time Complexity: O(?)
- Space Complexity: O(?)
Explanation¶
[Add detailed explanation here]