筆試演算法和資料結構 字串移動演算法

2021-06-18 13:28:42 字數 1430 閱讀 6792

演算法和資料結構是筆試和技術麵必會涉及的內容,而且與程式設計有關最為基礎也是最為重要的也是這一塊,而目前筆記的題目往往是從公司的題庫中抽取的,"猜中"的可能性還是比較大的,但如何去猜,並不是說我們上網把那什麼面試寶典上的題全記一遍,但如果記性好,那也可以,比如那什麼排序,查詢考的可能性較大的,但是這樣對於自己的思維上的提高真的幫助很小,這些天看演算法和資料結構下來,發現很多的演算法的思想方法是相通的,如果再了解如何去權衡時間複雜度和空間複雜度,如何優化自己的演算法,這個過程才是最為重要的.

總結這些的學習,什麼是符合題意的演算法,網上基本都找的到,我覺得如果要記錄下,最主要的是記錄思考過程及思想方法.

ps.有些演算法直接摘自網路,方便閱讀.

什麼左旋字型串,其它定義為把字串前面若干個字元移動到字串的尾部

設計乙個演算法,把乙個含有n個元素的陣列迴圈右移k位,要求時間複雜度為o(n),

且只允許使用兩個附加變數。

如:

abcd1234→4abcd123→34abcd12→234abcd1→1234abcd。

這裡的字串的移動主要是通過字元交換完成.

這裡我們可以發現其右移後的字串和未移時的相比,可以明顯的分段,即abcd和1234,兩子段的順序沒有變化.

這裡我們給出乙個思路,因為迴圈右移的整體感覺就是兩個子段的交換位置

法一,常用的方法是:先將子段逆順,然後再整體逆序.

我們可以這樣理解,反反得正.即我們最終換的只是子段的位置,而不改變子段的順序,而我們先將子段逆序,再整體逆序最終結果是子段內順序的還原,

用數學表示

1、首先分為倆部分,x:abc,y:def;

2、x->x^t,abc->cba, y->y^t,def->fed。

3、(x^ty^t)^t=yx,cbafed->defabc,即整個翻轉。

附上**: a.

#include

#include

#define offset 3

void reverse(char *array,int b,int e);

int main()

printf("\n");

return 0;

}void swap(char *a,char *b)

void reverse(char *array,int length,int m)

int r=length%m; //乘下的字元個數

while(r--)

p1++;

p2++;}}

執行結果:efghijkljkabcd

總結:

這裡主要用到的是整體和個體的關係,即個體的劃分不是固定的,而是相對的.有些時候可以將幾個元素看成乙個整體處理.

陣列的移動靠的是交換,如果首尾交換成形逆序,相臨元素的交換則是順序移動,但如果兩次首尾交換,乙個子段,一次整段,剛可以實現塊的移動.

資料結構與演算法 字串

判斷乙個串是不是回文串,往往要分開編寫,造成 的拖沓 int longestpalindrome const char s,int n return max void longestpalindrome test 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...

資料結構與演算法 字串

生成n對括號的所有合法排列 描述 給定乙個非負整數n,生成n對括號的所有合法排列。解答 該問題解的個數就是卡特蘭數,但是現在不是求個數,而是要將所有合法的括號排列列印出來。該問題和 程式設計之美 的買票找零問題一樣,通過買票找零問題我們可以知道,針對乙個長度為2n的合法排列,第1到2n個位置都滿足如...

資料結構演算法之字串

字串是由若干個字元組成,在c c 中常常使用 0 字元作為結尾,這樣很方便的為我們查詢到字串的最後乙個字元。為了節省空間,c c 常常將字串單獨放到乙個記憶體空間中,當幾個指標賦予相同的變數時,實際上他們會指向相同的位址空間 實現乙個函式將字串中的空格替換成 20 實現方式 方式一 如果是建立新的字...