代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串
Posted 小懒懒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串相关的知识,希望对你有一定的参考价值。
第四章 字符串part01
今日任务
● 344.反转字符串
● 541. 反转字符串II
● 剑指Offer 05.替换空格
● 151.翻转字符串里的单词
● 剑指Offer58-II.左旋转字符串
详细布置
344.反转字符串
建议: 本题是字符串基础题目,就是考察 reverse 函数的实现,同时也明确一下 平时刷题什么时候用 库函数,什么时候 不用库函数
题目链接/文章讲解/视频讲解:https://programmercarl.com/0344.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2.html
541. 反转字符串II
建议:本题又进阶了,自己先去独立做一做,然后在看题解,对代码技巧会有很深的体会。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0541.%E5%8F%8D%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2II.html
剑指Offer 05.替换空格
建议:对于线性数据结构,填充或者删除,后序处理会高效的多。好好体会一下。
题目链接/文章讲解:https://programmercarl.com/%E5%89%91%E6%8C%87Offer05.%E6%9B%BF%E6%8D%A2%E7%A9%BA%E6%A0%BC.html
151.翻转字符串里的单词
建议:这道题目基本把 刚刚做过的字符串操作 都覆盖了,不过就算知道解题思路,本题代码并不容易写,要多练一练。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0151.%E7%BF%BB%E8%BD%AC%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%87%8C%E7%9A%84%E5%8D%95%E8%AF%8D.html
剑指Offer58-II.左旋转字符串
建议:题解中的解法如果没接触过的话,应该会想不到
代码随想录算法训练营第14天|530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先
代码随想录算法训练营第17天|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236.二叉树的最近公共祖先
530.二叉搜索树的最小绝对差
提交代码
class Solution
public:
TreeNode* pre = nullptr;
int result = INT_MAX;
void traversal(TreeNode* node)
if(node == nullptr) return;
traversal(node -> left);
if(pre != nullptr)
if(abs(node -> val - pre -> val) < result)
result = abs(node -> val - pre -> val);
pre = node;
traversal(node -> right);
int getMinimumDifference(TreeNode* root)
TreeNode* cur = root;
traversal(root);
return result;
;
提交代码(二分法)
class Solution
public:
vector<int> inorder;
void traversal(TreeNode* node)
if(node == nullptr) return;
traversal(node -> left);
inorder.push_back(node -> val);
traversal(node -> right);
int getMinimumDifference(TreeNode* root)
traversal(root);
int result = INT_MAX;
for(int i = 1; i < inorder.size(); i++)
if(abs(inorder[i] - inorder[i - 1]) < result)
result = abs(inorder[i] - inorder[i - 1]);
return result;
;
501.二叉搜索树中的众数
提交代码(方法)
class Solution
public:
vector<int> result;
int max_count = 0;
int count = 0;
TreeNode* pre = nullptr;
void traversal(TreeNode* node)
if(node == nullptr) return;
traversal(node -> left);
if(pre)
if(node -> val == pre -> val)
count++;
else
count = 1;
if(count > max_count)
result.clear();
result.push_back(node -> val);
max_count = count;
else if(count == max_count)
result.push_back(node -> val);
else
count++;
result.push_back(node -> val);
max_count = count;
pre = node;
traversal(node -> right);
vector<int> findMode(TreeNode* root)
traversal(root);
return result;
;
236.二叉树的最近公共祖先
提交代码(方法)
class Solution
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
if(root == p || root == q || root == nullptr) return root;
TreeNode* left = lowestCommonAncestor(root -> left, p, q);
TreeNode* right = lowestCommonAncestor(root -> right, p ,q);
if(left != nullptr && right != nullptr) return root;
else if(left != nullptr && right == nullptr) return left;
else if(left == nullptr && right != nullptr) return right;
return nullptr;
;
总结
日期: 2023 年 3 月 15 日
学习时长: 1 h 0 m
难度:
★
\\bigstar
★
★
\\bigstar
★
累计完成题目数量: 57
距离目标还有数量: 243
小结:
以上是关于代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串的主要内容,如果未能解决你的问题,请参考以下文章
代码随想录算法训练营第三天 | 203.移除链表元素707.设计链表 206.反转链表
代码随想录算法训练营第14天 | ● 理论基础 ● 递归遍历 ● 迭代遍历 ● 统一迭代
代码随想录算法训练营第10天 | ● 理论基础 ● 232.用栈实现队列 ● 225. 用队列实现栈