調(diào)和級數(shù) 3447
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
class Solution { public int[] assignElements(int[] groups, int[] elements) { // 找到group中的最大值 int max = 0; for(int ele : groups) { max = Math.max(max, ele); } // 創(chuàng)建字典,遍歷elements,填入dict int[] dict = new int[max + 1]; Arrays.fill(dict, -1); for(int i = 0; i < elements.length; i++) { int num = elements[i]; // 如果超出了group最大值 直接不用考慮 // 如果已經(jīng)被標(biāo)記,說明它的約數(shù)已經(jīng)在它前面,比如[2,4] 到4的時候,其實2已經(jīng)標(biāo)記過了 if(num > max || dict[num] != -1) continue; // 對num的倍數(shù)進行標(biāo)記 for(int j = num; j <= max; j = j + num) { if(dict[j] != -1) continue; dict[j] = i; } } // 根據(jù)dict 對groups的數(shù)據(jù)填表,返回結(jié)果 int[] result = new int[groups.length]; for(int i = 0; i < groups.length; i++) { result[i] = dict[groups[i]]; } return result; } }

浙公網(wǎng)安備 33010602011771號