Fonte: Link: https://leetcode-cn.com/problems/assign-cookies
Declaração: Se eu violar os direitos de alguém, por favor, entre em contato comigo e irei excluí-lo.
Bem - vindos especialistas para me pulverizar
Artigo Diretório
tema
Suponha que você seja um ótimo pai e queira dar alguns biscoitos aos seus filhos. No entanto, cada criança pode dar apenas um cookie, no máximo.
Para cada criança i, existe um valor de apetite g [i], que é o menor tamanho de biscoito que pode satisfazer o apetite das crianças, e cada biscoito j tem um tamanho s [j]. Se s [j]> = g [i], podemos atribuir esse cookie j à criança i, e essa criança ficará satisfeita. Seu objetivo é satisfazer o maior número de crianças possível e produzir esse valor máximo.
Exemplo 1:
Entrada: g = [1,2,3], s = [1,1]
Saída: 1
Explicação:
Você tem três filhos e dois biscoitos. Os valores de apetite dos três filhos são: 1, 2, 3 -
Embora você tenha dois biscoitos pequenos, como o tamanho deles é 1, você só pode satisfazer a criança cujo apetite é 1.
Portanto, você deve imprimir 1.
Exemplo 2:
Entrada: g = [1,2], s = [1,2,3]
Saída: 2
Explicação:
Você tem dois filhos e três biscoitos, e os valores de apetite dos dois filhos são 1,2, respectivamente .
A quantidade e o tamanho dos cookies que você possui são suficientes para satisfazer todas as crianças.
Portanto, você deve imprimir 2.
提示 :
1 <= g.length <= 3 * 10 ^ 4
0 <= s.length <= 3 * 10 ^ 4
1 <= g [i], s [j] <= 2 ^ 31 - 1
Meu código de ponteiro duplo
Aqui é para classificar os dois arrays primeiro, os dois ponteiros apontam para o início do array e compará-los um por um
- g [i] <= s [j] significa que o doce pode ser alocado para g [i], ret ++;
- g [i]> s [j] significa que o doce não pode ser dividido em g [i], [j ++] aponta para o próximo doce
class Solution {
public int findContentChildren(int[] g, int[] s) {
//Arrays.sort(g);
quickSort(g, 0, g.length-1);
quickSort(s, 0, s.length-1);
//Arrays.sort(s);
int i=0, j=0;
int ret=0;
while(i<g.length && j<s.length){
if(g[i] <= s[j]){
ret++;
i++; j++;
}else{
j++;
}
}
return ret;
}
public void quickSort(int[] arr, int start, int end){
if(start >= end) return;
int p = partition(arr, start, end);
quickSort(arr, start, p);
quickSort(arr, p+1, end);
}
public int partition(int[]arr, int left, int right){
int key = arr[left];
while(left < right){
while(left < right && arr[right] >= key) right--;
arr[left] = arr[right];
while(left < right && arr[left] <= key) left ++;
arr[right] = arr[left];
}
arr[left] = key;
return left;
}
}
Código do Grande Deus
Esta é a ideia,
https://leetcode-cn.com/problems/assign-cookies/solution/fen-fa-bing-gan-by-leetcode-solution-50se/
class Solution {
public int findContentChildren(int[] g, int[] s) {
Arrays.sort(g);
Arrays.sort(s);
int numOfChildren = g.length, numOfCookies = s.length;
int count = 0;
for (int i = 0, j = 0; i < numOfChildren && j < numOfCookies; i++, j++) {
while (j < numOfCookies && g[i] > s[j]) {
j++;
}
if (j < numOfCookies) {
count++;
}
}
return count;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/assign-cookies/solution/fen-fa-bing-gan-by-leetcode-solution-50se/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。