這部分不會有很系統的講解,只是列舉一些題目,分享一下我和別人的思路。
1.1 陣列的查詢
陣列,可以說是最簡單的資料型別,它占用一塊連續的記憶體並按照順序儲存資料。與vector不同,建立陣列時,需要指定陣列的大小,而且不允許動態增加陣列元素。
陣列中的記憶體是連續的,而且可以根據下標讀寫元素,時間效率高,正是這一點,我們可以使用它來實現簡單的雜湊表。
在c/c++中,陣列和指標是互相關聯,而又有區別的兩個概念。當我們宣告乙個陣列時,陣列名同時也是乙個指標,我們可以用指標訪問陣列。而兩者的區別,我們可以使用sizeof()看出來:
#include
using
namespace
std;
int getsize(int data)
int main()
; int size1 = sizeof(data1);
int *data2 = data1;
int size2 = sizeof(data2);
int size3 = getsize(data1);
cout
<< size1 << " "
<< size2 << " "
<< size3;
}
執行結果:
sizeof(data1) - 求的是整個陣列的大小;
sizeof(data2) - 求的是指標的大小,32位系統中為4;
getsize(data3) - 函式呼叫用時,陣列會自動退化為同型別的指標。
進入正題:二維陣列中的查詢
題目:(摘抄自劍指offer)思路:不要使用逐個遍歷,因為這個陣列是有特點的,要利用陣列本身的特點,進行計算。在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
舉個例項:
如果尋找數字」1」,則返回true;如果尋找數字11,則返回false。
那麼如何查詢呢?
我們可以先查詢最後的一列的第一行的元素,此處是4;如果target是小於該元素,則可略過該列,直接尋找它的前一列;如果target是大於該元素,則可以略過該行,直接尋找它的下一行。
程式實現:
class solution
if(target > array[i][j]) // 如果target較大,則查詢下一行
}return
false;}};
同樣用示例的陣列作為實參,target設為1和11,執行得到結果:
執行成功,結果正確!
1.2 字串的空格替換
在c/c++中,字串都是以』\0』結尾的,這樣我們很容易得到它的長度,當然,由於這個特性,我們在定義和使用字串時,需要注意,不要造成字串越界。
下面例項說明這一點
exp:
#include
using
namespace
std;
int main(int argv, char** argc)
執行結果:
s1和s2是兩個字串陣列,在c/c++中,它們各自存放在不同的記憶體區域中,因此,輸出的結果顯示兩者不同;
而p和q是兩個指標,c/c++中無須為它們分配記憶體以及儲存字串的內容,而只需要把它們指向」hello world」在記憶體中的位址即可。而」hello world」是常量字串,它在記憶體中只有乙個拷貝,因此p和q指向的是同乙個位址。所以,p和q得到的結果相同的。
替換空格
分析:
與實際結合,在網路程式設計中,當url引數中含有特殊字元,如空格、#號等,可能導致伺服器無法獲取正確的引數值。我們需要將這些特殊字元轉換成伺服器能識別的字元。
就本題而言,通過直接遍歷,複製乙個新的陣列,這個是從前到後改變陣列的值,可以實現該題功能,但是這樣實現很複雜。
新思路:從後改變陣列的值。先遍歷求出陣列的實際長度,並且求出新陣列的實際長度,然後,使用下標從後給新陣列賦值。如下圖所示:
這樣,就不需要兩次遍歷整個陣列。
**實現:
#include
class
solution
// 求出新陣列的長度
// 並使用下表從尾到頭進行賦值
int oldindex = oldlength;
int newindex = oldlength + 2*blanknum;
while(oldindex <= newindex && oldindex>=0)
else
--oldindex;}}
};int main()
printf("\n\n");
solution s1;
s1.replacespace(str11,50);
char *p = str11;
printf("after solution: \n");
while(*p != '\0')
printf("\n");
return
0;}
執行結果:
執行成功!
資料結構與演算法(1)
演算法 資料結構 一 演算法 1.演算法的幾個特徵是什麼。2.演算法複雜性的定義。大o 小o分別表示的含義。3.遞迴演算法的定義 遞迴演算法的兩要素。4.分治演算法的思想,經典的分治演算法 全排列 二分搜尋 歸併排序 快速排序 線性時間選擇 最接近點對問題 5.動態規劃演算法解題框架,動態規劃演算法...
資料結構與演算法(1)
1 線性表 2 棧 3 佇列 4 字串 補充 遞迴 1 樹與二叉樹 2 圖 1 查詢 2 排序 編寫相關演算法 資料結構 入門問題 1.為什麼學習資料結構?1 高階程式設計的理論指導 2 提公升編碼能力 3 面試中經常被問及,看發展潛力 2.有哪些資料結構?2.11線性結構 線性表 棧 佇列 陣列 ...
資料結構與演算法 1
cpu 處理器central process unit gpu 圖形處理器graphics processing unit,又稱顯示核心 視覺處理器 顯示晶元或繪圖晶元,是一種專門在個人電腦 工作站 遊戲機和一些移動裝置 如平板電腦 智慧型手機等 上執行繪圖運算工作的微處理器。其用途是將計算機系統所...