暑假算法7.17,Day16
BFS,DFS
第一题
/**
* 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<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
vector<vector<int>> result;
if(root!=NULL) que.push(root);
while(!que.empty()){
int n= que.size();
vector<int> p;
for(int i=0;i<n;i++){
TreeNode* node=que.front();
que.pop();
p.push_back(node->val);
if(node->left!=NULL) que.push(node->left);
if(node->right!=NULL) que.push(node->right);
}
result.push_back(p);
}
return result;
}
};
第二题
int dx[4] = {0, -1, 0, 1};
int dy[4] = {-1, 0, 1, 0};
typedef pair<int, int> PII;
class Solution {
public:
int orangesRotting(vector<vector<int>>& grid) {
//BFS
queue<PII> q;
int n = grid.size(), m = grid[0].size();
bool flag = false;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j) {
if (grid[i][j] == 2) q.push(make_pair(i, j));
if (grid[i][j] == 1) flag = true;
}
int cnt = 0;
while (!q.empty() && flag) {
int len = q.size();
for (int i = 0; i < len; ++i) {
PII t = q.front();
q.pop();
for (int i = 0; i < 4; ++i) {
int x = t.first+dx[i], y = t.second+dy[i];
if (x >= 0 && x < n && y >=0 && y < m && grid[x][y] == 1) {
q.push(make_pair(x, y));
grid[x][y] = 2;
}
}
}
cnt++;
}
if (flag) {
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
if (grid[i][j] == 1) return -1;
}
return flag? cnt-1 : 0;
}
};
第三题
/**
* 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> rightSideView(TreeNode* root) {
vector<int> ans;
if(root==NULL)
return ans;
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
int len = q.size();
for(int i = 0; i < len; i++){
root = q.front();
q.pop();
if(root->left)
q.push(root->left);
if(root->right)
q.push(root->right);
}
ans.push_back(root->val);
}
return ans;
}
};
第四题
Difference Operations
不能靠翻译呀,唉…翻译成a[i]-a[i]-1
,实际是a[i]-a[i-1]
;属实是给我整纳闷了。。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int N;
cin>>N;
while(N--)
{
int n;
cin>>n;
int a[n];
for(int i=0; i<n; i++)
{
cin>>a[i];
}
bool flag=true;
for(int i=0; i<n; i++)
{
if(a[i]%a[0]!=0)
{
flag=false;
}
}
if(flag)
{
cout<<"YES"<<endl;
}
else
{
cout<<"NO"<<endl;
}
}
return 0;
}