[Práctica de preguntas sobre algoritmos preferidos] día 6


1. 76. Subcadena de cobertura mínima

1. Introducción al tema

76. Subcadena de cobertura mínima
Se le proporciona una cadena s y una cadena t. Devuelve la subcadena más pequeña en s que cubre todos los caracteres de t. Si no hay una subcadena en s que cubra todos los caracteres de t, se devuelve la cadena vacía "".
Nota: Para caracteres repetidos en t, la cantidad de caracteres en la subcadena que estamos buscando no debe ser menor que la cantidad de caracteres en t.
Si dicha subcadena existe en s, garantizamos que es la única respuesta.
Insertar descripción de la imagen aquí
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    string minWindow(string s, string t) {
    
    
        int n = s.size(), m = t.size();
        vector<int> vt(128);
        for(auto& e : t)
        {
    
    
            vt[e]++;
        }
        vector<int> vs(128, 0);
        int count = 0;
        int len = INT_MAX;
        int begin = 0;
        for(int left = 0, right = 0;right < n; ++right)
        {
    
    
            char t = s[right];
            if(++vs[t] <= vt[t]) count++;
            while(count == m)
            {
    
    
                len < (right - left + 1) ? len : (len = (right - left + 1), begin = left);
                char t = s[left];
                if(vs[t]-- <= vt[t]) count--;
                left++;
            }
        }
        if(len == INT_MAX) return "";
        return s.substr(begin, len);
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí

2. 704. Búsqueda binaria

1. Introducción al tema

704. Búsqueda binaria
Dada una matriz de números enteros ordenados (ascendentes) de n elementos y un valor objetivo objetivo, escriba una función para buscar el objetivo en números. Si el valor objetivo existe, devuelva el subíndice; de ​​lo contrario, devuelva -1.
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    int search(vector<int>& nums, int target) {
    
    
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
    
    
            int mid = left + (right - left) / 2;
            if(nums[mid] < target)
            {
    
    
                left = mid + 1;
            }
            else if(nums[mid] > target)
            {
    
    
                right = mid - 1;
            }
            else
            {
    
    
                return mid;
            }
        }
        return -1;
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí

3. 34. Encuentra la primera y última posición de un elemento en una matriz ordenada.

1. Introducción al tema

34. Encuentre la primera y la última posición de un elemento en una matriz ordenada. Se
le proporciona una matriz de números enteros ordenados en orden no decreciente y un valor objetivo objetivo. Encuentre la posición inicial y la posición final del valor objetivo dado en la matriz.
Si el valor objetivo no existe en la matriz, se devuelve [-1, -1].
Debe diseñar e implementar un algoritmo con complejidad temporal O (log n) para resolver este problema.
Insertar descripción de la imagen aquí

2. Ideas para resolver problemas

3.Código

class Solution {
    
    
public:
    int _bsearch(vector<int>& nums, int target)
    {
    
    
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
    
    
            int mid = left + (right - left) / 2;
            if(nums[mid] < target)
            {
    
    
                left = mid + 1;
            }
            else
            {
    
    
                right = mid - 1;
            }
        }
        return right + 1;
    }
    int _esearch(vector<int>& nums, int target)
    {
    
    
        int left = 0, right = nums.size() - 1;
        while(left <= right)
        {
    
    
            int mid = left + (right - left) / 2;
            if(nums[mid] <= target)
            {
    
    
                left = mid + 1;
            }
            else
            {
    
    
                right = mid - 1;
            }
        }
        return left - 1;
    }
    vector<int> searchRange(vector<int>& nums, int target) {
    
    
        int begin = _bsearch(nums, target);
        int end = _esearch(nums, target);
        if(begin <= end && end < nums.size() && begin >= 0)
        return {
    
    begin, end};
        return {
    
    -1, -1};
    }
};

4. Resultados de ejecución

Insertar descripción de la imagen aquí


Resumir

Hoy es el sexto día de práctica de algoritmos.
Si perseveras, podrás tallar oro y piedra , sigue trabajando duro.
Fuente: LeetCode, los derechos de autor pertenecen a LeetCode.
Si este artículo os ha inspirado, espero que podáis apoyar más al autor, ¡gracias a todos!

Supongo que te gusta

Origin blog.csdn.net/xjjxjy_2021/article/details/131674829
Recomendado
Clasificación