第一题
链接:2319. 判断矩阵是否是一个 X 矩阵 - 力扣(LeetCode)
思路:直接遍历整个数组,查看每个位置是否符合题目条件
class Solution {
public:
bool checkXMatrix(vector<vector<int>>& grid) {
int res=0;
for(int i=0;i<grid.size();i++)
{
for(int j=0;j<grid[i].size();j++)
{
if((i==j)||(i+j==grid.size()-1))
{
if(grid[i][j]==0) res++;
}else{
if(grid[i][j]!=0) res++;
}
}
}
if(res==0) return true;
else return false;
}
};
第二题
链接:2320. 统计放置房子的方式数 - 力扣(LeetCode)
思路:先把一边的房子可能放置的方案m列出来,总方案数则为m*m。由题意可知可能放置的房子方案数量满足dp[i]=dp[i-1]+dp[i-2]的关系
class Solution {
public:
int countHousePlacements(int n) {
if(n==1)
{
return 4;
}
if(n==2)
{
return 9;
} //把没有i-1和i-2的情况单独列出来
long a=1,b=2,c=3;
for(int i=3; i<=n;i++) {
a=b;
b=c;
c=(a+b) % 1000000007;
} //计算一边房子的可能数量
//满足dp[i]=dp[i-2]+dp[i-1]的关系
return (int)(c*c% 1000000007); //结果为两边的数量相乘
}
};
第三题
链接:2321. 拼接数组的最大分数 - 力扣(LeetCode)
思路:计算出最大的交换后数组差,题目所求的结果为原数组和加上最大的交换后数组差
class Solution {
int solve(vector<int>&nums1,vector<int>&nums2) {
int s=0,maxdiff=0;
for (int i=0,diff=0;i<nums1.size();i++) {
s+=nums1[i]; //选择第一个数组进行求和
diff=max(diff+nums2[i]-nums1[i],0);
//不断得到数组差->
//这里存在两种清况:1.当交换过来的差值在总情况下会使数组增大,保留
// 2.当交换过来的差值在总情况下使数组减小,在后面建立新的left重新开始计算
maxdiff=max(maxSum,diff); //不断比较交换后数组差,保留其中最大的
}
return s+maxdiff; //返回数组和加上最大的交换后数组差
}
//交换后的数组和=原数组和+交换后数组差
public:
int maximumsSplicedArray(vector<int> &nums1, vector<int> &nums2) {
return max(solve(nums1,nums2),solve(nums2,nums1)); //比较交换后的num1和num2保留最大值
}
};