劍指offer C 刷題總結(1)

2021-10-09 14:14:03 字數 2076 閱讀 5801

在乙個二維陣列中(每個一維陣列的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

雙指標

class solution 

int n = array[0].size();

int l = 0;

int r = n - 1;

while(l < m && r >= 0) else if(target > array[l][r]) else

}return false;

}};

1、遍歷字串陣列得到空格數

2、根據空格數得到轉換後新字串的總長度

3、由後往前進行空格轉換

class solution 

int cnt = 0; // 用於記錄空格數量

for(int i = 0; i < length; ++i)

}// 當空格數為0時,直接返回

if(cnt == 0)

int newlength = length + cnt * 2;

for(int i = length - 1; i >= 0; i--) else

}}};

輸入乙個鍊錶,按鍊錶從尾到頭的順序返回乙個arraylist。

方法一:遍歷鍊錶,並將遍歷結果依次插入到vector的第乙個位置

方法二:翻轉鍊錶,並遍歷翻轉後的鍊錶

/**

* struct listnode

* };

*/class solution

return arr;

*/// 方法二

listnode *node;

listnode *newnode = nullptr;

while(head)

vectorarr;

while(newnode)

return arr;

}};

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

遞迴

/**

* definition for binary tree

* struct treenode

* };

*/class solution

int root_idx = pre_left;

int in_idx = m[pre[root_idx]];

treenode* root = new treenode(pre[root_idx]);

int length = in_idx - vin_left;

root->left = reconstruct(pre, pre_left + 1, pre_left + length, vin, vin_left, in_idx - 1);

root->right = reconstruct(pre, pre_left + 1 + length, pre_right, vin, in_idx + 1, vin_right);

return root;

}treenode* reconstructbinarytree(vectorpre,vectorvin)

for(int i = 0; i < n; ++i)

treenode* root = reconstruct(pre, 0, n - 1, vin, 0, n - 1);

return root;

}private:

mapm;

};

劍指offer C 刷題總結(2)

目錄 用兩個棧實現佇列 題目 題解 完整 旋轉陣列最小的數字 題目 題解 完整 斐波那契數列 題目 題解 完整 跳台階題目 題解 完整 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。當發生push和pop操作時,對兩個棧實現一次資料置換操作,實現佇列的先進先出。c...

劍指offer C 刷題總結(4)

目錄 調整陣列順序使奇數字於偶數前面 題目 題解 完整 鍊錶中倒數第k個節點 題目 題解 完整 反轉鍊錶 題目 題解 完整 合併兩個排序的鍊錶 題目 題解 完整 樹的子結構 題目 題解 完整 二叉樹的映象 題目 輸入描述 題解 完整 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的...

劍指刷題5

題目 用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。解題思路 push操作的話其實佇列和棧的邏輯是一樣的,入口就是第乙個stack,主要是pop的話要實現佇列的先進先出的邏輯,所以要將stack中已有的node依次pop然後馬上push到stack2中。class...