当前位置:网站首页>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 :

边栏推荐
猜你喜欢

8 CAS

Research and practice of super-resolution technology in the field of real-time audio and video

RESTAPI 版本控制策略【eolink 翻译】

Classification automatique des cellules de modules photovoltaïques par défaut dans les images de lecture électronique - notes de lecture de thèse

Interpretation of transpose convolution theory (input-output size analysis)

关于ssh登录时卡顿30s左右的问题调试处理

PMP對工作有益嗎?怎麼選擇靠譜平臺讓備考更省心省力!!!

Flink并行度和Slot详解

AD域组策略管理

openEuler 资源利用率提升之道 01:概论
随机推荐
2022.07.05
String - string (Lua)
8 CAS
R语言使用ggplot2函数可视化需要构建泊松回归模型的计数目标变量的直方图分布并分析构建泊松回归模型的可行性
杰理之手动配对方式【篇】
MySQL、sqlserver oracle数据库连接方式
648. 单词替换
谷歌seo外链Backlinks研究工具推荐
R语言ggplot2可视化:使用ggpubr包的ggqqplot函数可视化QQ图(Quantile-Quantile plot)
银行理财产品怎么买?需要办银行卡吗?
PMP practice once a day | don't get lost in the exam -7.7
Netease Yunxin participated in the preparation of the standard "real time audio and video service (RTC) basic capability requirements and evaluation methods" issued by the Chinese Academy of Communica
编译器优化那些事儿(4):归纳变量
Kunpeng developer summit 2022 | Kirin Xin'an and Kunpeng jointly build a new ecosystem of computing industry
R language ggplot2 visualization: use the ggdensity function of ggpubr package to visualize the packet density graph, and use stat_ overlay_ normal_ The density function superimposes the positive dist
Introduction to bit operation
Browse the purpose of point setting
Jürgen Schmidhuber回顾LSTM论文等发表25周年:Long Short-Term Memory. All computable metaverses. Hierarchical reinforcement learning (RL). Meta-RL. Abstractions in generative adversarial RL. Soccer learn
Interpretation of transpose convolution theory (input-output size analysis)
R language ggplot2 visualization: use the ggstripchart function of ggpubr package to visualize the dot strip plot, set the position parameter, and configure the separation degree of different grouped
