Leetcode una pregunta del día: 977.squares-of-a-sorted-array (cuadrados de matriz ordenada)

Inserte la descripción de la imagen aquí
Idea: Primero encuentre el elemento con el valor absoluto más pequeño en él, luego punteros dobles, uno a la izquierda y otro a la derecha, compare el elemento actual al que apuntan los dos punteros y coloque qué puntero apunta al siguiente elemento; finalmente coloque el resto no en Pon todo de un lado;

Inserte la descripción de la imagen aquí

vector<int> sortedSquares(vector<int> &A)
{
    
    
	int mid = 0;
	int len = A.size();
	while (mid < len - 1)
	{
    
    
		if (abs(A[mid + 1]) > abs(A[mid]))
		{
    
    
			break;
		}
		mid++;
	}

	//此时A[mid]为整个数组中绝对值最小的;
	vector<int> res;
	int l = mid, r = mid + 1;
	while (l >= 0 && r < len)
	{
    
    
		if (abs(A[l]) > abs(A[r]))
		{
    
    
			res.push_back(pow(A[r], 2));
			r++;
		}
		else
		{
    
    
			res.push_back(pow(A[l], 2));
			l--;
		}
	}
	while (l >= 0)
	{
    
    
		res.push_back(pow(A[l], 2));
		l--;
	}
	while (r < len)
	{
    
    
		res.push_back(pow(A[r], 2));
		r++;
	}
	return res;
}

Supongo que te gusta

Origin blog.csdn.net/wyll19980812/article/details/108842984
Recomendado
Clasificación