341场周赛

一最多的行

image-20230416121032511

+++++++++++

简单题

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public int[] rowAndMaximumOnes(int[][] mat) {
int n = mat.length;
int max = 0;
int a = 0;
int res[] = new int[2];
for (int i = 0;i<n;i++){
int ans = 0;
for (int j = 0;j<mat[i].length;j++){
if (mat[i][j]==1){
++ans;
}
}
if (ans>max){
a = i;
max = ans;
}
}
res[0] = a;
res[1] = max;
return res;
}
}

别人得代码,就很简洁!!加油加油。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {

public int[] rowAndMaximumOnes(int[][] mat) {
int[] result = { 0, 0 };
for (int i = 0; i < mat.length; i++) {
int count = 0;
for (int j : mat[i]) {
count += j;
}
if (count > result[1]) {
result = new int[] { i, count };
}
}
return result;
}
}

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

image-20230416121221928

示例 1:

1
2
3
4
5
6
7
输入: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] ,它的可整除性得分最大。

示例 2:

1
2
3
4
5
6
7
输入: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]

示例 3:

1
2
3
4
5
6
输入:nums = [12], divisors = [10,16]
输出:10
解释:divisors 中每个元素的可整除性得分为:
divisors[0] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 10 整除。
divisors[1] 的可整除性得分为 0 ,因为 nums 中没有任何数字能被 16 整除。
由于 divisors[0] 和 divisors[1] 的可整除性得分都是最大的,因此,我们返回数值最小的一个,即 divisors[0]

+++++++++

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public static int maxDivScore(int[] nums, int[] divisors) {
int len = divisors.length;
HashMap<Integer,Integer> map = new HashMap<>();
int max =0 ;
int result = Integer.MAX_VALUE;
for (int i = 0;i<len;i++){
int ans = check(nums,divisors[i]);
if(ans>max || ans==max && divisors[i]<result){
result = divisors[i];
max = ans;
}
}
return result;
}
public static int check(int nums[],int a){
int count =0 ;
for (int i = 0;i<nums.length;i++){
if (nums[i]%a==0){
count++;
}
}
return count;
}
}

构造有效字符串得最少插入数

image-20230416122041647

示例 1:

1
2
3
输入:word = "b"
输出:2
解释:在 "b" 之前插入 "a" ,在 "b" 之后插入 "c" 可以得到有效字符串 "abc"

示例 2:

1
2
3
输入:word = "aaa"
输出:6
解释:在每个 "a" 之后依次插入 "b""c" 可以得到有效字符串 "abcabcabc"

示例 3:

1
2
3
输入:word = "abc"
输出:0
解释:word 已经是有效字符串,不需要进行修改。

+++++++++++++

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class Solution {
public static int addMinimum(String word) {
int len = word.length();
if (len==1) return 2;
int sum = 0;
List<String> list = new ArrayList<>();
int i =0,j = 0;
while (i<len && j<len){
if (word.charAt(j)=='b'){
if (j+1<len && word.charAt(j+1)=='c'){
j++;
}
list.add(word.substring(i,j+1));
j = j+1;
i = j;
}else if (word.charAt(j)=='c'){
j++;
list.add(word.substring(i,j));
i = j;
}else {
if (j+1<len && word.charAt(j+1)=='b'){
j++;
}
if (j+1<len && word.charAt(j+1)=='c'){
j++;
}
list.add(word.substring(i,j+1));
j = j+1;
i = j;

}
}
for (int a = 0;a<list.size();a++){
String s = list.get(a);
if (s.equals("a") ||s.equals("b") || s.equals("c")) sum+=2;
else if (s.equals("ab") || s.equals("ac") ||s.equals("bc")) sum+=1;
else if (s.equals("abc")) sum+=0;
}
return sum;
}
}

学习大佬得代码:太妙了

image-20230416124323681

1
2
3
4
5
6
7
8
9
10
11
class Solution {
public static int addMinimum(String word) {
int count = 1;
for (int i = 0;i<word.length()-1;i++){
if (word.charAt(i)>=word.charAt(i+1)){
count++;
}
}
return count*3-word.length();
}
}

方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Solution {
public int addMinimum(String word) {
int res = 0;
word = word.replaceAll("abc","0").
replaceAll("ab","1").
replaceAll("bc","1").
replaceAll("ac","1").
replaceAll("a","2").
replaceAll("b","2").
replaceAll("c","2");
for (int i = 0; i < word.length(); i++) {
res += word.charAt(i) - '0';
}
return res;
}
}

最小化旅行的价格总和


341场周赛
http://example.com/2023/04/16/341场周赛/
作者
zlw
发布于
2023年4月16日
许可协议