暑假算法7.21,Day20
矩阵
这几天有点浮躁,在准备科目二的考试,今天考完啦,也是顺利通过了。前面两天的题目刷的有点浮躁,会花时间重新补补。也再跟着b站里面的视频敲一个关于医疗方面的安卓app包括了前后台,如果后续完成了的话,也会分享出来
一起加油把!!
第一题
这个题目写过,我也不知道为什么会再出一遍,可能重要吧,哈哈哈哈,代码里面有注释应该很容易看懂
class Solution {
public:
vector<int> spiralOrder(vector<vector<int>>& matrix) {
int m = matrix.size(), n = matrix[0].size();
int top = 0, bottom = m-1, left = 0, right = n-1;
int cnt = m*n;
vector<int> res;
while(cnt>=1){
//从左到右
for(int j=left; j<=right && cnt>=1; j++, cnt--)
res.push_back(matrix[top][j]);
top++;
//从上到下
for(int i=top; i<=bottom && cnt>=1; i++, cnt--)
res.push_back(matrix[i][right]);
right--;
//从右到左
for(int j=right; j>=left && cnt>=1; j--, cnt--)
res.push_back(matrix[bottom][j]);
bottom--;
//从下到上
for(int i=bottom; i>=top && cnt>=1; i--, cnt--)
res.push_back(matrix[i][left]);
left++;
}
return res;
}
};
第二题
这个题目核心思想就是遍历搜索,首先要找到为0的数,然后把那一行和那一列都标记;最后再写一个循环去搜索判断就行
class Solution {
public:
void setZeroes(vector<vector<int>>& matrix) {
vector<int>a(matrix.size());//申请行空间
vector<int>b(matrix[0].size());//申请列空间
for(int i=0;i<matrix.size();i++){//遍历搜索矩阵
for(int j=0;j<matrix[0].size();j++){
if(matrix[i][j]==0){//标志
a[i]=true;
b[j]=true;
}
}
}
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
if(a[i]||b[j]){//最后进行对标记的判断
//被标记了,那么那一行和那一列的数都置0
matrix[i][j]=0;
}
}
}
}
};
第三题
这个题目看一眼就知道怎么做的,首先把矩阵里面的数据放进一个线性容器里面去,然后排序,根据输入的k来获取第k小的数据即可。
class Solution {
public:
int kthSmallest(vector<vector<int>>& matrix, int k) {
vector<int>p;
for(int i=0;i<matrix.size();i++){
for(int j=0;j<matrix[0].size();j++){
p.push_back(matrix[i][j]);//把矩阵数据一个接在一个后面放入vector容器里面
}
}
sort(p.begin(),p.end());//对vector容器里面的数据进行排序
return p[k-1];//返回需要查找的数据
}
};
第四题
题目大意:第一行输入一个n,接下来第二行输入2*n个数据,保证前面n个数的和与后面n个数的和不相等。
这个题简直就是一个傻瓜题。。一开始想着要把前面n个数和后面n个数的和都遍历一遍求出来然后再进行比较。代码敲到一半突然想到我是不是只需要把不符合条件的判断一遍就可以了呢,然后就开始想到只需要对数据进行排序不就可以了吗,如果不符合条件那么肯定所有的数据都是一样的啊。这样问题就解决了。
#include <bit/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
int a[2*n+5];
for(int i=0; i<2*n; i++)
{
cin>>a[i];
}
sort(a,a+2*n);
if(a[0]!=a[2*n-1])
{
for(int i=0; i<2*n; i++)
{
if(i==2*n-1){
cout<<a[i]<<endl;
}else{
cout<<a[i]<<" ";
}
}
}
else
{
cout<<"-1"<<endl;
}
return 0;
}
也许过程会骗人,但结果一定不会骗人!!