> 文章列表 > 第 341 场周赛

第 341 场周赛

第 341 场周赛

6376 一最多的行

题意:从矩阵A中,找出包含最多1的行的下标以及这一行中1的数目。如果有多行包含最多的 1 ,只需要选择行下标最小的那一行。

class Solution {
public:vector<int> rowAndMaximumOnes(vector<vector<int>>& mat) {vector<int> ans;int m = mat.size();int n = mat[0].size();int num;int res = 0;int pos = 0;for(int i=0;i<m;i++){num = 0;for(int j=0;j<n;j++){if(mat[i][j] == 1){num++;}}if(num > res){res = num;pos = i;}}ans.push_back(pos);ans.push_back(res);return ans;}
};

6350.找出可整除性得分最大的整数

题意:给你两个下标从 0 开始的整数数组 nums 和 divisors 。

divisors[i] 的 可整除性得分 等于满足 nums[j] 能被 divisors[i] 整除的下标 j 的数量。

返回可整除性得分 最大的整数 divisors[i] 。如果有多个整数具有最大得分,则返回数值最小的一个。

class Solution {
public:int maxDivScore(vector<int>& nums, vector<int>& divisors) {int l = divisors.size();int ll = nums.size();int pos;vector<int> di;for(int i=0;i<l;i++){int res = divisors[i];pos = 0;for(int j=0;j<ll;j++){if(nums[j] % res == 0){pos++;}}di.push_back(pos);}int res = di[0];int ans = divisors[0];for(int i=1;i<di.size();i++){if(di[i] > res){res = di[i];ans = divisors[i];}else if(di[i] == res){ans = min(ans,divisors[i]);}}return ans;}
};

6375.构造有效字符串的最少插入数

给你一个字符串 word ,你可以向其中任何位置插入 “a”、“b” 或 “c” 任意次,返回使 word 有效 需要插入的最少字母数。
如果字符串可以由 “abc” 串联多次得到,则认为该字符串 有效

思路:贪心,假如当前字符大于等于后一个字符,说明这两个字符属于不同的abc。如此满足下标的这样的有k个,那么完成插入后,至少有k + 1个abc。因此答案就是(3(k+1) - n)

class Solution {
public:int addMinimum(string word) {int n = word.size();int ans = 1;for (int i = 1; i < n; i++) if (word[i] <= word[i - 1]) ans++;return ans * 3 - n;}
};

6378.最小化旅行的价格总和

待补