第一题
这题直接模拟,然后找出并统计算术三元组个数即可。
class Solution {
public:
int arithmeticTriplets(vector<int>& nums, int diff) {
int r = 0;
int a = 1;
while(a <= nums.size() - 2){
for(int i = 0 ; i < a ; i ++){
if(nums[a] - nums[i] == diff){
for(int j = a + 1 ; j < nums.size() ; j ++){
if(nums[j] - nums[a] == diff)r ++;
}
}
}
a ++;
}
return r;
}
};
第二题
先记录每个结点的邻居结点在哈希表中,再记录访问过的结点,将受限的结点记录下来,再把第0个结点压入队列进行广搜,将该结点未被访问的邻结点压入队列,最后统计它的个数即可。
class Solution {
public:
unordered_map<int, vector<int>> neibor;
unordered_set<int> visited;
int reachableNodes(int n, vector<vector<int>>& edges, vector<int>& restricted) {
for(vector<int> vec : edges){
neibor[vec[0]].push_back(vec[1]);
neibor[vec[1]].push_back(vec[0]);
}
for(int restri : restricted){
visited.insert(restri);
}
queue<int> bfs;
bfs.push(0);
int res = 0;
while(!bfs.empty()){
int nowVisit = bfs.front();
visited.insert(nowVisit);
bfs.pop();
res ++;
for(int next : neibor[nowVisit]){
if(!visited.count(next)){
bfs.push(next);
}
}
}
return res;
}
};