Directorio de artículos
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.
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
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.
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
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.
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
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!