在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。
首先在二維陣列的第一行的數與這個整數比較,找到比這個整數大的位置的前乙個位置,如果都比這個整數小,則這個位置就是第一行的最後乙個位置。確定第一行的位置,就從這個位置往下找,如果找到就成功返回,找不到就把第一行確定的位置往前乙個,再往下找,如果找到第一列沒找到,就返回false。
class solution
j--;
while(j >= 0)
j--;
}return false;
}};
簡單的題目,放了很久才拿起來,而且還是學習了別人的做法才會的,其實就是先統計空格的數量(count
),才從後面往前遍歷,遇到字幕往後移動2 * count
位置,2
因為還有個空格,這樣就剛好裝下%20
,遇到空格往後,將%20
填到字母前面。
class solution
}int pr = length - 1;
while(length > 0 && pr > -1)
else
*(str + pr + space * 2) = *(str + pr);
pr--;
}}};
輸入乙個鍊錶,從尾到頭列印鍊錶每個節點的值
從頭到尾將鍊錶的值存到棧中,再一一從棧中取出。
class solution
while(!s.empty())
return v;
}};
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。
首先,將根結點的值找到,將前序的第乙個找到在中序的位置(mid
),這個中序的mid
的左右便是根的左右子樹,並且根據這個mid將中序分為兩部分,分別為左右子樹的中序遍歷,並且將前序遍歷也分為左右子樹的前序遍歷,再進行遞迴就行了,結束條件便是中序或者是前序的長度為0
了,返回null;
class solution
while(j < mid)
j++;
while(j < len)
root->left = reconstructbinarytree(pre_left, vin_left);
root->right = reconstructbinarytree(pre_right, vin_right);
return root;
}};
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。 佇列中的元素為int型別。
進佇列操作就用棧1進棧儲存資料,出佇列需要借助棧2,當棧2為空時,需要把棧1的資料出棧,將資料進棧到棧2,再將棧2出棧即為出佇列,當棧2不為空時,棧2出棧的資料即為出佇列資料。
class solution
int pop()
int t = stack2.top();
stack2.pop();
return t;
}else
}private:
stackstack1;
stackstack2;
};
把乙個陣列最開始的若干個元素搬到陣列的末尾,我們稱之為陣列的旋轉。 輸入乙個非遞減排序的陣列的乙個旋轉,輸出旋轉陣列的最小元素。 例如陣列為的乙個旋轉,該陣列的最小值為1。 note:給出的所有元素都大於0,若陣列大小為0,請返回0。
陣列旋轉前是非遞減的,只要找到旋轉後不是非遞減的位置就是最小值。
class solution
return 0;
}};
牛客網 劍指Offer 索引
二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...
牛客網 劍指Offer 索引
二維陣列中的查詢 替換空格 從尾到頭列印鍊錶 重建二叉樹 用兩個棧實現佇列 旋轉陣列的最小數字 斐波那契數列 跳台階 跳台階 矩形覆蓋 二進位制中1的個數 數值的整數次方 調整陣列順序使奇數字於偶數前面 鍊錶中倒數第k個結點 反轉鍊錶 合併兩個排序的鍊錶 樹的子結構 二叉樹的映象 順時針列印矩陣 包...
牛客劍指offer 1 10題解
在乙個二維陣列中 每個一維陣列的長度相同 每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。class solution else continue 記憶體集體向右移兩個位元組 並置 0前兩個位元組 v...