编程珠玑学习笔记
編程珠璣學習筆記
1.在整數的存儲方面有時候可以采取位圖和位向量來表示。
例如我們可以將集合{1,2,3,5,8,13}存儲在下面的這個字符串中:01110100100001000000.
集合中表示數字的各個位設置為1,而其他的位全部設為0.給定了表示文件中整數集合的位圖數據結構后,我們可以將編寫程序的過程分為3個自然階段。
第一個階段關閉所有的位,將集合初始化為空集。
第二個階段讀取文件中的每個整數,并打開相應的位,建立該集合。
第三個階段檢查每個位,如果某個位是1,就寫出相應的整數,從而創建已排序的輸出文件。
這樣輸出的文件就已排好序。
2.將n個元素旋轉i個位置。例如n=8,i=3,那么向量abcdefgh旋轉后得到向量defghabc。
第一種方法是將x[0]放到臨時變量t中,然后將x[i]放x[0],x[2i]放x[i]……
a b c d e f g h i j k l m n o p q
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
f g h i j k l m n o p q c d e a b
第二種方法是ab要想轉為ba則可以把b中前i個字符和a換。變為abrbi->bibra
m n o p q f g h i j k l a b c d e
h i j k l f g m n o p q a b c d e
f g j k l h i m n o p q a b c d e
f g h i j k l m n o p q a b c d e
第三種方法是ab各自翻轉。再整個翻轉。ab->[arbr]r->ba
reverse(0,i-1);
reverse(i,n-1);
reverse(0,n-1);
e d c b a q p o n m l k j i h g f
f g h i j k l m n o p q a b c d e
最后一種方法用得時間只有On,也只需要一個字節存儲臨時變量即可。
3.找出詞典中的變位詞,例如pots、stop、tops就是變位詞
對于這個問題,我們可以分為三個步驟來進行。
第一、對單詞進行簽名,也就是忽略掉單詞各個字母的位置。直接根據26個字母的排位進行簽名。
這樣就會使所有變位詞的簽名都變成同一個。
第二、對已簽名的文件進行排序,注意是根據它們的簽名來排序。
第三、將同一個變位詞類中的每個單詞擠壓到同一行中。例如:
pans anps pans anps pans
pots opst pots anps snap pans snap
pot --->簽名-->opt opt --->排序-->opt opt --->擠壓--> opt
snap ---> -->anps snap ---> -->opst opst ---> -->post stop tops
stop opst stop opst stop
tops opst tops opst tops
4.c語言標準庫中的qsort函數可以實現一個數組的排序。具體參考百科。雖然代碼不比冒泡排序少,但是執行時間卻少得多。
轉載于:https://www.cnblogs.com/Victorzsg/p/3467515.html
總結
- 上一篇: 解决接收参数乱码,tomcat的URIE
- 下一篇: 微软自家的.Net下的JavaScrip