力扣第320场周赛
竞赛 - 力扣 (LeetCode)备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/contest/weekly-contest-320/1.数组中不等三元组的数目力扣
https://leetcode.cn/problems/number-of-unequal-triplets-in-array/
只想到了暴力,三次循环一下满足
class Solution {
public:
int unequalTriplets(vector<int>& nums) {
int i=0;
int ans=0;
while(i<nums.size()-2){
int j=i+1;
while(j<nums.size()-1){
int k=j+1;
while(k<nums.size()){
if(nums[i] != nums[j]&&nums[i] != nums[k] && nums[j]!= nums[k])ans++;
k++;
}
j++;
}
i++;
}
return ans;
}
};
2.二叉搜索树最近节点查询力扣https://leetcode.cn/problems/closest-nodes-queries-in-a-binary-search-tree/
先取出元素后通过二分来查找位置
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
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;
}
};
ACwing第78场周赛
商品名称和产地名字长度都不会超过10,所以分别把两者的长度用空格补充为10,然后拼接起来。之后插入set中,保证唯一性
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
unordered_set<string> st;
while(n--){
string name, place;
cin >> name >> place;
while(name.size()<10) name = name + ' ';
while(place.size()<10) place = place + ' ';
st.insert(name + place);
}
cout<<st.size()<<endl;
return 0;
}
开一个空栈来维护,string s的元素逐次进栈,只要接下来想进栈字符与top()相同,则说明是连续的字符,那么不但不能进栈,还要把top()给弹栈,最后剩下的就是没被消过的字符
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <string>
#include <stack>
using namespace std;
stack<char> stk;
string ans;
string removeDuplicates(string s) {
for(auto item:s)
{
if(!stk.empty()&&stk.top()==item)
stk.pop();
else
stk.push(item);
}
while(!stk.empty())
{
ans+=stk.top();
stk.pop();
}
reverse(ans.begin(),ans.end());
return ans;
}
int main()
{
string n;
cin>>n;
cout<<removeDuplicates(n);
return 0;
}