题目来源于知识星球—英雄算法联盟,五月算法集训专题
目录
前言
跟随英雄算法联盟博主—英雄哪里出来,每天完成相应的算法练习,一个月后,必定会有所成长!
一、1351.统计有序矩阵中的负数(简单)
1.题目描述
2.解题思路
直接进行双层循环遍历数组即可,遇到元素小于0,计数器++。
本题需要注意的是 行数=grid.size(); 列数=grid[0].size();
3.代码演示(C++)
class Solution
{
public:
int countNegatives(vector<vector<int>>& grid)
{
int ans=0;
int n=grid.size();//行数
int m=grid[0].size();//列数
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(grid[i][j]<0)
{
ans++;
}
}
}
return ans;
}
};
4.题目链接
二、1672.最富有客户的资产总量(简单)
1.题目描述
2.解题思路
首先用一个vector数组来存储每位客户的资产。矩阵的行数为客户的数量,矩阵
的列数等于每名客户存储资产的银行数,只需要把每行的元素值相加,即可得到
每名客户的总资产,最后进行排序,返回最大值即可。
3.代码演示(C++)
class Solution
{
public:
int maximumWealth(vector<vector<int>>& accounts)
{
int m=accounts.size();//行数
int n=accounts[0].size();//列数
vector<int>sum(m);//用数组sum来存储每位客户的资产
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
sum[i]+=accounts[i][j];
}
}
sort(sum.begin(),sum.end());//对客户资产进行排序,返回最大值
return sum[m-1];
}
};
4.题目链接
三、832.翻转图像(简单)
1.题目描述
2.解题思路
水平翻转时将一行中的元素交换位置即可,反转时,将元素值与1进行异或,
最后返回二维数组即可。
3.代码演示(C++)
class Solution
{
void swap(int *a,int *b)
{//将两个数字交换位置
int temp;
temp=*a;
*a=*b;
*b=temp;
}
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& image)
{
int m=image.size();//行数
int n=image[0].size();//列数
for(int i=0;i<m;i++)
{//先对每一行的元素交换位置
for(int j=0;j<n/2;j++)
{
swap(&image[i][j],&image[i][n-1-j]);
}
for(int j=0;j<n;j++)
{
image[i][j]^=1;//对每个数字异或1,实现原地反转
}
}
return image;
}
};
4.题目链接
四、1329.将矩阵按对角线排序(中等)
1.题目描述
2.解题思路
暂时还不会做
3.代码演示(C++)
4.题目链接
总结
每天跟随英雄哥学习相关的算法,一个月会收获很多,如果你想了解更多关于知识星球的内容,欢迎联系我!