关于一道中等难度的题,看谁的算法好 ,继续求更好算法

CutBug 2007-05-24 12:21:57
源贴:
题目:数组中有n个数据,要将它们顺序循环后移k位,例如0,1,2,3,4循环后移3位后为2,3,4,0,1。

尽可能使空间和时间复杂度最小。看谁的算法好
-----------------------
我忽略了奇偶问题:修改如下

const int n =5;
int[] arr = new int[n] { 0,1,2,3,4};

int t;
//移动


for (int i = n-3; i < n; i++)
{
t = arr[i];
arr[i] = arr[(i + 3) % n];
arr[(i + 3) % n] = t;

}
if (n / 2 != 0)
{
t = arr[n-1];
arr[n - 1] = arr[n-2];
arr[n - 2] = t;
}

...全文
373 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
medie2005 2007-05-27
  • 打赏
  • 举报
回复
参见《编程珠玑》

也可参考下贴:

http://community.csdn.net/Expert/topic/5488/5488725.xml?temp=.1329767
chengzanmiao 2007-05-27
  • 打赏
  • 举报
回复
非常无聊的问题!~~
直接对数组的头指针进行操作就行了.
只要你不把数组乱序就行.
loveverfc 2007-05-26
  • 打赏
  • 举报
回复
const int n = 10;
int j;//移动几位
cin>>j;
new int arr[n];
int i;
for(i=0;i<n;i++)
{
arr[i] = i;
}
for(int k=0;k<j;k++)
{
for(i=0;i<n;i++)
{
tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
superzxf 2007-05-26
  • 打赏
  • 举报
回复
用个指针记录重定位的起始位置就可以了呀
mlsii 2007-05-25
  • 打赏
  • 举报
回复
较真了
留意一下
expter 2007-05-24
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5554/5554474.xml?temp=.9387781
嗷嗷叫的老马 2007-05-24
  • 打赏
  • 举报
回复
留名,学习算法
VCLIFE 2007-05-24
  • 打赏
  • 举报
回复
关注
fire_woods 2007-05-24
  • 打赏
  • 举报
回复
不是问过了吗?

求余运算量是很大的.
CutBug 2007-05-24
  • 打赏
  • 举报
回复

const int n = 10;
int[] arr = new int[n] { 0, 1, 2, 3, 4, 5,6,7,8,9};
int[] nArr = new int[n];
//移动
for (int i = 0; i < n; i++)
{
nArr[i] = arr[(i + n-3) % n];
}
//打印数据
for (int i = 0; i < n; i++)
{
MessageBox.Show(nArr[i].ToString());
}

69,379

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧