当前位置:网站首页>LeetCode力扣(剑指offer 36-39)36. 二叉搜索树与双向链表37. 序列化二叉树38. 字符串的排列39. 数组中出现次数超过一半的数字
LeetCode力扣(剑指offer 36-39)36. 二叉搜索树与双向链表37. 序列化二叉树38. 字符串的排列39. 数组中出现次数超过一半的数字
2022-07-07 17:44:00 【木白CPP】
剑指 Offer 36. 二叉搜索树与双向链表
题解:
思路很简单,就是一个中序遍历,一边遍历一边把节点连接起来。
代码:
class Solution {
public:
Node *pre,*head;
void dfs(Node* root){
if(root==nullptr) return;
dfs(root->left);
if(pre==nullptr) head=root;//这是个头节点
else
pre->right=root;
root->left=pre;
pre=root;
dfs(root->right);
}
Node* treeToDoublyList(Node* root) {
if(root == nullptr) return root;
dfs(root);
head->left=pre;
pre->right=head;
return head;
}
};
结果:
剑指 Offer 37. 序列化二叉树
题解:
序列化一般采用前序,中序,后序,这里采用前序。
序列化,用前序遍历将二叉树的节点保存到一个字符串中,每个节点之间用’,‘隔开。值得注意的是,在遍历的过程中需要将二叉树看成一颗满二叉树,空节点用’null‘表示。
反序列化,将字符串放在队列que中,用’,‘判断并推入到队列中。通过前序遍历,一边前序遍历一边建立二叉树节点。
代码:
class Codec {
public:
// Encodes a tree to a single string.
string serialize(TreeNode* root) {
if(root==nullptr) return "null,";
string str=to_string(root->val)+',' ;
str+=serialize(root->left);
str+=serialize(root->right);
return str;
}
// Decodes your encoded data to tree.
TreeNode* deserialize(string data) {
queue<string> que;
string str;
for(auto i:data){
if(i==','){
que.push(str);
str.clear();
}
else
str.push_back(i);
}
return rdeserialize(que);
}
TreeNode* rdeserialize(queue<string> &que){
if (que.front() == "null") {
que.pop();
return nullptr;
}
TreeNode* root = new TreeNode(stoi(que.front()));
que.pop();
root->left = rdeserialize(que);
root->right = rdeserialize(que);
return root;
}
};
结果:
剑指 Offer 38. 字符串的排列
题解:
最关键是去重复,因为有重复的字符。可以用一个标志位,判断当前的字符是否出现在前面的字符串中。
代码:
class Solution {
public:
vector<string> res;
void dfs(string &s,int sz,int pos){
if(pos==sz) res.push_back(s);
for(int i=pos;i<sz;++i){
bool flag=true;
for(int j=pos;j<i;++j){
if(s[j]==s[i]) flag=false;
}
if(flag){
swap(s[i],s[pos]);
dfs(s,sz,pos+1);
swap(s[i],s[pos]);
}
}
}
vector<string> permutation(string s) {
dfs(s,s.size(),0);
return res;
}
};
结果:
剑指 Offer 39. 数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
题解:
方法一:排序
如果重复字符有超过一半的,排序后必然会在数组中间位置。
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
结果:
方法二:哈希
用哈希存储,一旦这个值大于数组长度的一半就返回该值。
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
unordered_map<int,int>map;
for(auto i:nums){
++map[i];
if(map[i]>nums.size()/2) return i;
}
return -1;
}
};
结果:
边栏推荐
- Solve the problem of remote rviz error reporting
- The research group of the Hunan Organizing Committee of the 24th China Association for science and technology visited Kirin Xin'an
- IP tools
- 2022.07.02
- 【STL】vector
- 最长公共前缀(leetcode题14)
- 一张图深入的理解FP/FN/Precision/Recall
- J ü rgen schmidhub reviews the 25th anniversary of LSTM papers: long short term memory All computable metaverses. Hierarchical reinforcement learning (RL). Meta-RL. Abstractions in generative adversar
- 银行理财产品怎么买?需要办银行卡吗?
- Jerry's headphones with the same channel are not allowed to pair [article]
猜你喜欢
648. 单词替换
Research and practice of super-resolution technology in the field of real-time audio and video
项目经理『面试八问』,看了等于会了
Interpretation of transpose convolution theory (input-output size analysis)
Automatic classification of defective photovoltaic module cells in electroluminescence images-論文閱讀筆記
杰理之相同声道的耳机不允许配对【篇】
Kunpeng developer summit 2022 | Kirin Xin'an and Kunpeng jointly build a new ecosystem of computing industry
CMD command enters MySQL times service name or command error (fool teaching)
PV static creation and dynamic creation
Le PGR est - il utile au travail? Comment choisir une plate - forme fiable pour économiser le cœur et la main - d'œuvre lors de la préparation de l'examen!!!
随机推荐
杰理之关于 TWS 交叉配对的配置【篇】
杰理之按键发起配对【篇】
Time tools
网信办公布《数据出境安全评估办法》,9 月 1 日起施行
Navicat连接2002 - Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘解决
The research group of the Hunan Organizing Committee of the 24th China Association for science and technology visited Kirin Xin'an
浏览积分设置的目的
LeetCode1051(C#)
R语言使用ggplot2函数可视化需要构建泊松回归模型的计数目标变量的直方图分布并分析构建泊松回归模型的可行性
8 CAS
[Verilog advanced challenge of Niuke network question brushing series] ~ multi bit MUX synchronizer
杰理之手动配对方式【篇】
2022如何评估与选择低代码开发平台?
注解。。。
【剑指offer】剑指 Offer II 012. 左右两边子数组的和相等
R language ggplot2 visualization: use the ggviolin function of ggpubr package to visualize the violin diagram, set the palette parameter to customize the filling color of violin diagrams at different
论文解读(ValidUtil)《Rethinking the Setting of Semi-supervised Learning on Graphs》
索引总结(突击版本)
解决远程rviz报错问题
银行理财产品怎么买?需要办银行卡吗?