程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-新手OJ, C語言 字符串順序後移模塊,超時,優化無思路 求大神對指點

c語言-新手OJ, C語言 字符串順序後移模塊,超時,優化無思路 求大神對指點

編輯:編程綜合問答
新手OJ, C語言 字符串順序後移模塊,超時,優化無思路 求大神對指點

for(i=1; i<=m; i++){
a=z[n];
for(p=&z[n]; p>=&z[2]; p--)
p=(p-1);
z[1]=a;
}

    ++++++++++++++++++++++++++++++++++++++++

    作用:將數組z[n]中的所有元素進行向右移m位, 多出來的左端補上。
    例如:   12345  m=1       變成     51234

    但是我的算法效率太低, 當數組很長, m很大時超時,  
    求大神指點

最佳回答:


數組 12345 數組的長度大小 5 ,我們來看看m變化時數組元素的順序
m的值 數組元素的順序

0 12345
1 51234
2 45123

3 34512
4 23451
5 12345
6 51234 m=6 和 m=6%5 順序一樣,
7 45123 m=7 和 m=7%5 。。。。,
8 34512 m=8 和 m=8%5 。。。。,
9 23451 m=9 和 m=9%5 。。。。,
10 12345 m=10和 m=10%5=0(整除了,且是偶數倍) 和誰一樣??? 就是他自己
11 51234 m=11和 m=11%5=1 。。。。。,
.......
n m=n 和 m=n%5 一樣一樣的,

看出什麼了嗎? 相信你有點感覺了。
m變化時,最好的情況: m=0 或者m是數組長度大小的偶數倍 數組的數組順序是不變的。O(0)
最壞的情況: m是數組長度大小的奇數倍 直接將數組逆序就ok O(n)
綜合下 (n/2)
ok剩下的不用我多說了,兄弟你可以搞定。這只是我的一點優化想法,移動之前先算一下,就ok

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved