今日の1つの質問をリートコードします:977.squares-of-a-sorted-array(順序付けられた配列の正方形)

ここに写真の説明を挿入
アイデア:最初に絶対値が最小の要素を見つけ、次に左と右の2つのポインターを見つけ、2つのポインターが指す現在の要素を比較し、次の要素を指すポインターを配置します。最後に残りを配置しません。すべてを片側に置きます。

ここに写真の説明を挿入

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;
}

おすすめ

転載: blog.csdn.net/wyll19980812/article/details/108842984