描述:给你一个大小为m x n的二次制作矩阵mat,请你找出包含最多1行的下标(从0开始)以及这一行中1的数字目标。
如果有多行包包含最多的 1 ,只需要选择行下标最小的那一行。
返回一个由行下标和应该行中 1 的数量组组成的数量组。
输入: mat = [[0,1],[1,0]]
输出: [0,1]
解释:两行中 1 的数量相同。所以返回下标最小的行,下标为 0 。该行 1的数量为 1 。所以,答案为 [0,1] 。
输入: mat = [[0,0,0],[0,1,1]]
输出: [1,2]
解释:下标为 1 的行中 1 的数量最多。应该行 1 的数量为 2 。所以,答案为[1,2 ] 。
输入: mat = [[0,0],[1,1],[0,0]]
输出: [1,2]
解释:下标为 1 的行中 1 的数量最多。该行 1 的数量为 2 。所以,答案为[ 1,2] 。
思路:使用一个包含两个元素的vector
vector rowAndMaximumOnes(vector>& mat) {
// 存储最大1数 vector res[1]
// 存储最小行下标 vector res[0]
vector res(2,0);
int m=mat.size();
int n=mat[0].size();
// 按照行遍历
for(int i=0;ires[1]?i:res[0];
res[1]=max(res[1],num);
}
return res;
}
描述:给你两个下标从0开始的整数组nums和divisors。
divisors[i]的可整除性取决于满足能力nums[j]被divisors[i]整除的下j标的数量。
返回可整除性得分最大的整数divisors[i]。
输入: nums = [4,7,9,3,9], divisors = [5,2,3]
输入: 3
解释: divisors 中每个元素的可去除性得分为:
divisors[0] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 5 整除。
divisors[1] 的可整除性得分为 1 ,因为 nums[0] 能被 2 整除。
divisors[2] 的可整除性得分为 3 ,因为 nums[2]、nums[3] 和 nums[4] 都能够被 3 整除。
因此,返回 divisors[2] ,它的可去除性得分数最大。
输入: nums = [20,14,21,10], divisors = [5,7,5]
输入: 5
解释: divisors 中每个元素的可去除性得分为:
divisors[0] 的可整除性得分为 2 ,因为 nums[0] 和 nums[3] 都能够被 5 整除。
divisors[1] 的可整除性得分为 2 ,因为 nums[1] 和 nums[2] 都能够被 7 整除。
divisors[2] 的可整除性得分为 2 ,因为 nums[0] 和 nums[3] 都可以被5整除。
由于divisors[0]、divisors[1] 和 divisors[2] 的可整除性得分都是最大的,因此,我们返回数值最小的一个,即divisors[2] 。
输入: nums = [12], divisors = [10,16]
输入: 10
解释: divisors 中每个元素的可去除性得分为:
divisors[0] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 10 整除。
divisors[1] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 16 整除。
由于divisors[0]和divisors[1]的可去除性都是最大的,因此,我们返回值最小的一个,即divisors[0]。
思路:使用一个函数divide_num判断当前元素能被nums数组元素整除的数量num,使用res记录最大得分,使用data记录最大得分的最小元素值,注意,res和data均初始化为-1,我一开始初始化为0,但是发现其中仅有两个得分为0的元素,其也是返回的得分为0的最小元素值。遍历divisors数组,调用divide_num函数,得到当前元素得分num,如果num大于res则data取当前最大得分值,反之如果num等于res则data取两者中值最小的元素值,更新最大得分,最后返回data。
int divide_num(vector& nums,int d)
{
int n=nums.size();
int num=0;
for(int i=0;i& nums, vector& divisors) {
int n=divisors.size();
int res=-1;
int data=-1;
for(int i=0;ires)
data=divisors[i];
// 取相同得分最小值
else if(num==res)
data=min(data,divisors[i]);
// 更新得分
res=max(res,num);
}
return data;
}