力扣320
第2题:6242. 二叉搜索树最近节点查询 - 力扣(Leetcode)
先遍历,再二分查找。
class Solution {
public:
vector<int>vec;
void inorder(TreeNode* root)
{
if(root==nullptr)return;
inorder(root->left);
vec.push_back(root->val);
inorder(root->right);
}
tuple<int,int> find_pos(vector<int>& nums,int target)
{
if(target<nums[0])return {-1,nums[0]};
else if(target>nums[nums.size()-1])return {nums[nums.size()-1],-1};
int left=0;
int right=nums.size()-1;
int mid=(left+right)/2;
while(left<=right)
{
if(nums[mid]==target)return {nums[mid],nums[mid]};
else if(nums[mid]>target) right=mid-1;
else left=mid+1;
mid=(left+right)/2;
}
return {nums[right],nums[left]};
}
vector<vector<int>> closestNodes(TreeNode* root, vector<int>& queries) {
vector<vector<int>> ans;
inorder(root);
for(auto i:queries)
{
vector<int>temp(2);
auto[val1,val2]=find_pos(vec,i);
temp[0]=val1;
temp[1]=val2;
ans.push_back(move(temp));
}
return ans;
}
};
第3题:6243. 到达首都的最少油耗 - 力扣(Leetcode)
dfs,统计每个节点上的子节点,算其到父节点需要多少油耗,加起来。
class Solution {
public:
unordered_map<int,bool> vis;
long long ans = 0;
void dfs(int u, vector<vector<int>>& graph,int seats,vector<int>& ke){
if(u!=0 && graph[u].size()==1){
ke[u]++;
return;
}
vis[u]=true;
ke[u] +=1;
for(int i = 0;i<graph[u].size();i++){
if(!vis[graph[u][i]]){
dfs(graph[u][i],graph,seats,ke);
ke[u]+=ke[graph[u][i]];
if(ke[graph[u][i]]%seats==0) ans+=ke[graph[u][i]]/seats;
else ans+=ke[graph[u][i]]/seats+1;
}
}
}
long long minimumFuelCost(vector<vector<int>>& roads, int seats) {
vector<vector<int>> graph(roads.size()+1);
for(auto& road:roads){
graph[road[0]].push_back(road[1]);
graph[road[1]].push_back(road[0]);
}
vector<int> ke(roads.size()+1);
dfs(0,graph,seats,ke);
return ans;
}
};
acw78:
利用栈来实现。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <stack>
using namespace std;
int main() {
string str;
cin >> str;
int n = str.size();
stack<char> s;
for(int i = 0 ; i < n; i ++){
if(s.empty()){
s.push(str[i]);
}else{
if(str[i] == s.top()){
s.pop();
}else s.push(str[i]);
}
}
string res = "";
while(!s.empty()){
res += s.top();
s.pop();
}
int len = res.size();
for(int i = len - 1; i >= 0 ; i --){
cout << res[i];
}
return 0;
}