第一题:6148. 矩阵中的局部最大值
思路:枚举每个3*3的矩阵求最大值即可,竞赛时想复杂了直接g了
class Solution {
public:
vector<vector<int>> largestLocal(vector<vector<int>>& grid) {
int n = grid.size();
vector<int> tmp;
vector<vector<int>> res;
for(int i = 0; i < n - 2; i++){
tmp.clear();
for(int j = 0; j < n - 2; j++){
int ans = 0;
for(int k = 0; k <= 2; k++){
for(int l = 0; l <= 2; l++){
ans = max(ans,grid[i+k][j+l]);
}
}
tmp.push_back(ans);
}
res.push_back(tmp);
}
return res;
}
};
第二题:6149. 边积分最高的节点
思路:开辟一个数组来储存边积分即可,注意最后数值较大,可以用long long 来储存
class Solution {
public:
int edgeScore(vector<int>& edges) {
typedef long long LL;
LL res = 0;
LL n = edges.size();
vector<LL> ans(n,0);
for(LL i = 0; i < n; i++){
ans[edges[i]] += i;
}
LL tmp = 0;
for(LL i = 0; i < n; i++){
if(tmp < ans[i]){
res = i;
tmp = ans[i];
}
}
return res;
}
};
思路:贪心想法,是I就直接排,D倒序排即可
class Solution {
public:
string smallestNumber(string pattern) {
int n = pattern.size();
int i = 0;
int cur = '1';
string res(n + 1, 0);
while(i < n){
if( i && pattern[i] == 'I') i++;
for( ; i < n && pattern[i] == 'I'; i++) res[i] = cur++;
int k = i;
while( i < n && pattern[i] == 'D') i++;
for(int j = i; j >= k; j--) res[j] = cur++;//倒过来
}
return res;
}
};