算法旋转线性时间数组 [英] Algorithm to rotate an array in linear time
本文介绍了算法旋转线性时间数组的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何只在线性时间使用交换
功能通过旋转一个整数数组我
倍。
How to rotate an integer array by i
times using swap
function only in linear time.
推荐答案
您可以在线性时间内通过反向()辅助函数做到这一点。
You can do this in linear time by using a reverse() helper.
// rotate array of size=size, by n positions
void rotate(int array[], int size, int n)
{
// reverse array[0...size-1]
reverse(array, 0, size-1);
// reverse A[0...n-1]
reverse(array, 0, n-1);
// reverse A[n...size-1]
reverse(array, n, size-1);
}
// reverse elements in the array[pos_from ... pos_to]
void reverse(int array[], int pos_from, int pos_to)
{
...
}
实施反向(int数组[],INT pos_from,INT pos_to)
使用掉期是留给作为练习读者。提示:这可以在线性时间内完成
Implementing reverse(int array[], int pos_from, int pos_to)
using swaps is left as an exercise for the reader. Hint: This can be done in linear time.
这篇关于算法旋转线性时间数组的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文