2020-12-25Dução da força de participação de hoje == 455. Distribuir cookies

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

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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Acho que você gosta

Origin blog.csdn.net/qq_45531729/article/details/111674079
Recomendado
Clasificación