LeetCode筆試題 Rotate array(旋轉數組)

問題描述

給定一個數組,將數組中的元素向右移動 k 個位置,其中 k 是非負數。

示例 1:

輸入: [1,2,3,4,5,6,7] 和 k = 3
輸出: [5,6,7,1,2,3,4]
解釋:
向右旋轉 1 步: [7,1,2,3,4,5,6]
向右旋轉 2 步: [6,7,1,2,3,4,5]
向右旋轉 3 步: [5,6,7,1,2,3,4]

 示例 2:

輸入: [-1,-100,3,99] 和 k = 2
輸出: [3,99,-1,-100]
解釋: 
向右旋轉 1 步: [99,-1,-100,3]
向右旋轉 2 步: [3,99,-1,-100]

基本算法:

根據給定的k 將數組分爲兩部分,兩部分都進行數組逆置,然後在整體逆置。 

代碼 :

void reserve(int start, int end, int *arr)
{
	int tmp;
	while (start <= end)
	{
		tmp = arr[start];
		arr[start++] = arr[end];
		arr[end--] = tmp;
	}
}
void Rotate(int *arr,int len, int num)
{
	//斷言
	assert(arr != NULL);
	//判斷條件 當num是負數或者大於arr數組長度時直接返回
	if (num < 0 || num >= len)
	{
		return;
	}
	reserve(0, num, arr);//將數組前一部分逆置
	reserve(num + 1, len - 1, arr);//將數組後一部分逆置
	reserve(0, len - 1, arr);//將數組整體逆置
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Rotate(arr, len, 3);
	for each (int i in arr)
	{
		cout << i;
	}
	cout << endl;
	getchar();
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章