当前位置:网站首页>Leetcode force buckle (Sword finger offer 36-39) 36 Binary search tree and bidirectional linked list 37 Serialize binary tree 38 Arrangement of strings 39 Numbers that appear more than half of the tim
Leetcode force buckle (Sword finger offer 36-39) 36 Binary search tree and bidirectional linked list 37 Serialize binary tree 38 Arrangement of strings 39 Numbers that appear more than half of the tim
2022-07-07 19:57:00 【Wood White CPP】
The finger of the sword Offer 36. Binary search tree and double linked list
Answer key :
The idea is simple , It is a medium order traversal , Connect nodes while traversing .
Code :
class Solution {
public:
Node *pre,*head;
void dfs(Node* root){
if(root==nullptr) return;
dfs(root->left);
if(pre==nullptr) head=root;// This is a header node
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;
}
};
result :
The finger of the sword Offer 37. Serialize binary tree
Answer key :
Serialization generally adopts pre order , Middle preface , In the following order , Here we use the preface .
serialize , Use preorder traversal to save the nodes of the binary tree into a string , Between each node ’,‘ separate . It is worth noting that , In the process of traversal, we need to treat the binary tree as a full binary tree , Blank nodes with ’null‘ Express .
Deserialization , Put the string in the queue que in , use ’,‘ Judge and push into the queue . Traverse through the preamble , While traversing the preorder, establish a binary tree node .
Code :
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;
}
};
result :
The finger of the sword Offer 38. Arrangement of strings
Answer key :
The key is to repeat , Because there are repeated characters . You can use a flag bit , Judge whether the current character appears in the previous string .
Code :
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;
}
};
result :
The finger of the sword Offer 39. A number that appears more than half the times in an array
There is a number in an array that appears more than half the length of the array , Please find out the number .
You can assume that the array is not empty , And there are always many elements in a given array .
Answer key :
Method 1 : Sort
If there are more than half of the repeated characters , After sorting, it must be in the middle of the array .
Code :
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
};
result :
Method 2 : Hash
Store with hash , Once the value is greater than half the length of the array, the value is returned .
Code :
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;
}
};
result :
边栏推荐
- 杰理之发起对耳配对、回连、开启可发现、可连接的轮循函数【篇】
- ASP.NET体育馆综合会员管理系统源码,免费分享
- How to buy stocks on your mobile phone and open an account? Is it safe to open an account
- R language ggplot2 visualization: use the ggqqplot function of ggpubr package to visualize the QQ graph (Quantitative quantitative plot)
- IP 工具类
- 杰理之关于 TWS 交叉配对的配置【篇】
- Mysql, sqlserver Oracle database connection mode
- L1-028 judging prime number (Lua)
- Research and practice of super-resolution technology in the field of real-time audio and video
- “本真”是什么意思
猜你喜欢
【STL】vector
2022.07.02
华南X99平台打鸡血教程
Flink并行度和Slot详解
开源重器!九章云极DataCanvas公司YLearn因果学习开源项目即将发布!
Experiment 1 of Compilation Principle: automatic implementation of lexical analyzer (Lex lexical analysis)
Kirin Xin'an joins Ningxia commercial cipher Association
Research and practice of super-resolution technology in the field of real-time audio and video
[RT thread env tool installation]
Implement secondary index with Gaussian redis
随机推荐
CMD command enters MySQL times service name or command error (fool teaching)
Time tools
杰理之关于 TWS 交叉配对的配置【篇】
杰理之测试盒配置声道【篇】
Openeuler prize catching activities, to participate in?
【STL】vector
Tips and tricks of image segmentation summarized from 39 Kabul competitions
Unable to link the remote redis server (solution 100%
Research and practice of super-resolution technology in the field of real-time audio and video
Matplotlib drawing 3D graphics
凌云出海记 | 赛盒&华为云:共助跨境电商行业可持续发展
多个线程之间如何协同
Detailed explanation of Flink parallelism and slot
小试牛刀之NunJucks模板引擎
ASP. Net gymnasium integrated member management system source code, free sharing
一张图深入的理解FP/FN/Precision/Recall
Ways to improve the utilization of openeuler resources 01: Introduction
LeetCode 648(C#)
R语言ggplot2可视化:使用ggpubr包的ggstripchart函数可视化分组点状条带图(dot strip plot)、设置position参数配置不同分组数据点的分离程度
ASP.NET体育馆综合会员管理系统源码,免费分享