1 备忘录
可以用一维数组或者哈希表充当备忘录。
int fib(int N) { // 备忘录全初始化为 0 int[] memo = new int[N + 1]; // 进行带备忘录的递归 return helper(memo, N);}int helper(int[] memo, int n) { // base case if (n == 0 || n == 1) return n; // 已经计算过,不用再计算了 if (memo[n] != 0) return memo[n]; memo[n] = helper(memo, n - 1) + helper(memo, n - 2); return memo[n];}
2 求a,b,c三个数的最小值
min(a,min(b, c);
3 求最小值
int minValue = 0; minValue = min(minValue, value); //这样写的话,由于minValue初始化的值本来就为0,最后输出结果可能为0,因此该定义 int minValue = INT_MAX;
4 暴力法
解题搞不定了,用暴力法,结构为;
for (int i = 0; i < len; i++) {
for (int j = 0; j < i; j++)
}
5 跳跃重复的数字:
int temp = num[i];
while (num[i] == temp) {
i++
}
6 unordered_map 遍历
for (auto [key,value] : map)
7 如何将一个句子strs的每个单词都分开并存到vector<string> str中去?
用word 记录每一个单词,用isalpha() 函数来判断是否为字母;isalnum()判断是否为数字字母;tolower() 转成小写字母,toupper() 转成大写字母;
string word = "";
for (int i = 0; i < strs.size(); i++) {
if (isalpha(strs[i])) {
word.push_back(strs[i]);
} else if (word.size() > 0) {
str.push_back(word);
word = "";
}
}
8 如何将nums 数组降序排序
sort(nums.begin(), nums.end(), greater<int>());
9 如何计算一个数组之间的和?
accumulate(num.begin(), num.end(), val); //其中val 为要计算的初值
10 二维数组resize()
matrix.resize(4, vector<int>(4,1)); //resize 一个4x4 初值为1 的矩阵cd +
11 如何将string 进行反转?
1 reverser(str.begin(), str.end())
2 string reverseStr(str.rbegin(), str.rend());
//begin() 返回str 第一个元素所在迭代器,end() 返回最后一个元素的下一个位置迭代器;
//rbegin() 返回str 返回最后一个元素迭代器,rend() 返回第一个元素的前一个位置迭代器
12 反转链表函数
ListNode* reserveList(ListNode* head) {
ListNode* cur = head, *prev = nullptr;
while (cur != nullptr) {
ListNode* next = cur->next;
cur->next = prev;
prev = cur;
cur = next;
}
return prev;
}
13 链表操作
1)如果产生新的头节点,加入dummy节点可降低代码复杂度。
2)双指针是解决链表问题一种常用的技巧,前后指针,快慢指针。
3)单链表只能从前往后遍历,如要从后往前遍历,可以考虑将链表进行反转。
4)双链表记得理清每一个节点的指像,循环列表小心死循环。
14 树的迭代中序遍历
顺着左子节点的指针遍历二叉树把遇到的每一个节点都添加到栈中,当一个节点被遍历了之后可以通过栈找到它的父节点。
void inorderTraversal(TreeNode* root) {
stack<TreeNode>myStack;
TreeNode *cur = root;
while(cur != nullptr || !myStack.empty()) {
while (cur != nullptr) {
myStack.push(cur);
cur = cur->left;
}
cur = myStack.top();
cout << cur->val << ",";
myStack.pop();
cur = cur->right;
}
}