程序员编程艺术第一章(第二节)
第二節(jié):兩指針逐步翻轉(zhuǎn)
思路:
abc defghi,要 abc 移動(dòng)至最后
abc defghi->def abcghi->def ghiabc
定義倆指針, p1 指向 ch[0], p2 指向 ch[m];
一下過(guò)程循環(huán) m 次,交換 p1 和 p2 所指元素,然后 p1++, p2++;。
第一步,交換 abc 和 def ,
abc defghi->def abcghi
第二步,交換 abc 和 ghi,
def abcghi->def ghiabc
整個(gè)過(guò)程,看起來(lái),就是 abc 一步一步 向后移動(dòng)
abc defghi
def abcghi
def ghi abc
這個(gè)有個(gè)限制,如果字符串的個(gè)數(shù)正好是平移位的整數(shù)倍還好,如果不是 的話還要進(jìn)行調(diào)整:
由上述例子九個(gè)元素的序列 abcdefghi,您已經(jīng)看到, m=3 時(shí), p2 恰好指到了數(shù)組最后
一個(gè)元素,于是,上述思路沒(méi)有問(wèn)題。 但如果上面例子中 i 的后面還有元素列?
即,如果是要左旋十個(gè)元素的序列: abcdefghij, ok,下面,就舉這個(gè)例子,對(duì) abcdefghij
序列進(jìn)行左旋轉(zhuǎn)操作:
如果 abcdef ghij 要變成 defghij abc:
abcdef ghij
1. def abc ghij
2. def ghi abc j //接下來(lái), j 步步前移
3. def ghi ab jc
4. def ghi a j bc
5. def ghi j abc
下面,再針對(duì)上述過(guò)程,畫個(gè)圖清晰說(shuō)明下,如下所示:
def ghi abc jk
當(dāng) p1 指向 a, p2 指向 j 時(shí),由于 p2+m 越界,那么此時(shí) p1, p2 不要變
這里 p1 之后( abcjk)就是尾巴,處理尾巴只需將 j,k 移到 abc 之前,得到最終序列,代碼
編寫如下:
總結(jié)
以上是生活随笔為你收集整理的程序员编程艺术第一章(第二节)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 程序员的编程艺术第一章
- 下一篇: 程序员编程艺术第二章