Concurso semanal LeetCode 225
Pregunta 1: 5661. El último tiempo obtenido al reemplazar números ocultos
simulación
Código AC
class Solution {
public String maximumTime(String time) {
char[] cs = time.toCharArray();
char[] map = new char[]{
'2','3', ':', '5','9'};
int len = cs.length;
for(int i = 0; i < len; i++) {
if(cs[i] == '?') {
if(i == 0) {
if(cs[i + 1] > '3' && cs[i + 1] != '?') cs[i] = '1';
else cs[i] = '2';
} else {
if(i == 1 && cs[i - 1] != '2') cs[i] = '9';
else cs[i] = map[i];
}
}
}
return new String(cs);
}
}
Pregunta 2: 5662. El número mínimo de caracteres que se deben cambiar para cumplir una de las tres condiciones
Tipo de pregunta: Niuke Programming Summit S2 Game 6-Bronze & Silver & Gold Pregunta 2
No me lo esperaba todo de una vez.
Enumere el carácter máximo de a, 26 letras, enumere 26 veces, todos los caracteres de un tipo son menores que el carácter máximo y los caracteres en b son mayores o iguales que el carácter máximo
De manera similar, enumere el carácter más grande de b, el mismo carácter de a y b
Código AC
class Solution {
public int minCharacters(String a, String b) {
int alen = a.length(), blen = b.length();
char[] csa = a.toCharArray(), csb = b.toCharArray();
int ans = Integer.MAX_VALUE;
for(int i = 0; i < 26; i++) {
char cc = (char)('a' + i);
int c = 0, d = 0, e = 0;
for(int j = 0; j < alen; j++) {
if (csa[j] < cc) c++;
if (csa[j] > cc) d++;
if (csa[j] != cc) e++;
}
for(int j = 0; j < blen; j++) {
if (csb[j] >= cc) c++;
if (csb[j] <= cc) d++;
if (csb[j] != cc) e++;
}
ans = Math.min(ans, c);
ans = Math.min(ans, d);
ans = Math.min(ans, e);
}
return ans;
}
}
Pregunta 3: 5663. Encuentre el K-ésimo valor de la coordenada XOR más grande
Prefijo de registro y
Bidimensional -> prefijo y matriz unidimensionales
Ideas:
Inicializar la primera línea
Entonces el resultado XOR de la fila actual y la columna actual es igual a (resultado XOR de la fila anterior ^ resultado XOR de la fila actual a esta columna)
Luego ordene (de pequeño a grande), la salida len-k es el k-ésimo resultado XOR más grande
Código AC
class Solution {
public int kthLargestValue(int[][] m, int k) {
int row = m.length, col = m[0].length;
int[] pre = new int[row * col];
// 初始化
pre[0] = m[0][0];
// 列
for(int i = 1; i < col; i++) pre[i] = pre[i - 1] ^ m[0][i];
for(int i = 1; i < row; i++) {
int tmp = 0;
for(int j = 0; j < col; j++) {
tmp ^= m[i][j];
pre[i * col + j] = pre[(i - 1) * col + j] ^ tmp;
}
}
Arrays.sort(pre);
// System.out.println(Arrays.toString(pre));
int idx = row * col - k;
return pre[idx];
}
}
Cuarta pregunta: 5664. Coloque la caja
Encuentra la ley
No, para ser llenado
Código AC