Interview Companion 2: preguntas interesantes de la entrevista lógica BAT para compartir

propósito

  • Colección especial de algunos temas interesantes.
  • Estas preguntas serán fáciles de leer y erróneas.
  • Actualización continua, cada diez preguntas como un artículo

Tabla de contenido

Serie de artículos

1. Pensamiento XOR

1.1. En una matriz emparejada (es decir, cada número en la matriz debe tener otro número igual a su valor), el programador inserta un número por error (es decir, el número es único en esta matriz), cómo encontrar ¿Fuera de este número?

  • 答案:将所有数化为二进制,做异或

1.2. En un par de matrices (es decir, cada número en la matriz debe tener otro número igual a su valor), el programador insertó por error dos números (es decir, ambos números están en esta matriz Único), ¿cómo encontrar estos dos números?

  • 答案:异或所有数,所得结果相当于混入的这两个数的异或,取其不为0的某一位,按照这一位将数组元素分成两组(一组为0,一组为1),两组组内异或,分别得到这两个数。

1.3 ¿Determinar si un número es impar?
Respuesta: Hasta ahora, las dos formas más concisas son las siguientes:

方式一:
public static boolean isOdd(int i) {
    
    
    return i >> 1 << 1 != i;
}
方式二:
public static boolean isOdd(int i) {
    
    
    return (i & 1) == 1;
}

Blog de referencia:
la implementación subyacente de esas clases jdk ha utilizado operaciones de bits

Dos, relacionados con la matriz

2.1 Dada una matriz a [], recorra una vez para encontrar el elemento más grande (más pequeño).

  • 答案:冒泡排序。

2.2 Dada una matriz a [], averigüe que la suma de ciertos dos números es igual a un número dado M.

  • 答案:首先快排(从小到大),然后头尾两个指针,若头尾指向的数之和大于M,尾指针减减,否则头指针加加。

2.3 Dada una matriz a [], encuentre k números en ella (k> = 2) de modo que la suma sea igual a un número dado M, sin devolver falso.

  • ​​​​​​​答案:动态规划的思想。

En tercer lugar, el problema del puente

3.1. El problema de cuatro personas cruzando el puente: la velocidad se establece en v1, v2, v3, v4, encontrando v1> v2> v3> v4, y el tiempo de cruzar el río solo se encuentra: t1 <t2 <t3 <t4, está lloviendo en este momento, cuatro personas Solo hay un paraguas, por lo que las dos personas comparten un paraguas para cruzar el río. La velocidad de cruce más lenta es la principal. Después de cruzar el río, uno de ellos debe devolver el paraguas. Pregunte cómo organizar el tiempo de cruce más corto.

responder:

  • 方案一:正常思维会认为v1速度最快,让他每次回头送伞最合适,于是v1分别与其他人过河再回头送伞,总时间:t2+t3+t4+2*t1。
  • 方案二:考虑到v1>v2>>>v3>v4(即v1、v2远远大于v3、v4),可以让v1、v2先过河,v1回头送伞,v3、v4一起过河,v2回头送伞,然后v1、v2再过河, 总时间:t2+t1+t4+t2+t2。综合考虑,本题回答动态规划为最佳答案。

Cuatro preguntas aleatorias

4.1. Existe una función A () que puede generar números aleatorios del 0 al 9, y cada número aleatorio se genera con la misma probabilidad. Ahora necesitas escribir una función B () para que la probabilidad de generar números 1, 2, 3 sea 0.2 y el número 4 La probabilidad es de 0,4.
Respuesta:

public int B() {
    
    
    Switch(A()){
    
    
        Case 0, 6, 7, 8, 9:B();
        ​​​​​​​Case 1, 2, 3:Print(1or 2or 3); break;
        ​​​​​​​Case 4, 5:Print(4);break;
    }
}
或者
public int B() {
    
    
    Switch(A()){
    
    
        Case 01:Print(1);break;
        Case 23:Print(2);break;
        Case 45:Print(3);break;
        Case 6,7,89:Print(4);break;
    }
}

4.2. Existe una función A () que puede generar números aleatorios de 0 a 3, y cada número aleatorio se genera con la misma probabilidad. Ahora necesitas escribir una función B () para que la probabilidad de generar números 1, 2, 3 sea 0.2 y el número 4 La probabilidad es de 0,4.
Respuesta:

public int B() {
    
    
    Switch((A(),A()){
    
    
        Case (0,0):Print(1);break;
        Case (0,1):Print(2);break;
        Case (0,2):Print(3);break;
        Case (0,3),(1,0):Print(4);break;
        case other:B();break;
    }
}

Cinco, problemas de peso

5.1. Cuatro cajas de granos de chocolate con exactamente la misma apariencia se llaman A, B, C y D. Una caja de granos de chocolate pesa un gramo más que otras cajas Cómo encontrar esta caja de granos de chocolate pesándolos de una vez.
Respuesta:

  • 方法一:如果是显示重量的秤,则从第一盒取1个,第二盒取2个,第三盒取3个,第四盒取4个,重量比正常重几克就是第几盒。
  • 方法二:不显示重量的秤,每边放两盒,则能知道那边重,再分别取走一盒,看余下的是否平衡。

Seis, el problema de las ratas que beben medicamentos

6.1. Hay 1000 botellas de poción, y solo hay una botella de veneno adentro. Después de que la rata beba el veneno, morirá en solo una hora. Ahora te daré 10 ratas y 1 hora. Por favor, averigua esta botella de veneno (asumiendo que la cantidad de veneno es muy alta. Grande, se puede dividir en muchas partes y no afecta la toxicidad).

  • 因为只有一瓶药水,所以相对简单,首先对所有的药水编号1-1000,对老鼠编号1-10。
  • 十个老鼠前面放十个容器,盛药水,编号为x的药水,一定有一个二进制数(比如23号药水对应二进制:10111),因此把23号药水分别滴入第1号、第2号、第3号、第5号的老鼠容器内.
  • 做完前两步,分别让老鼠喝下去,1小时后,假设第x,y,z,k号小鼠死亡,那么毒药就是二进制为kzyx的那瓶,比如第2号、第3号、第5号、第7号老鼠死亡,对应的二进制为0001010110,因此第86号药水是毒药。

6.2. Hay 1000 botellas de poción, y solo hay una botella de veneno. Después de que la rata beba el veneno, morirá en solo una hora. Ahora te dan 2 ratas y unas pocas horas. Por favor, averigua esta botella de veneno (asumiendo que la cantidad de veneno es muy alta. Grande, se puede dividir en muchas partes y no afecta la toxicidad).

  • 本题区别于上题是,只有两只小鼠,因此不能采用二进制了,换个思维,采用二维矩阵,我们把1000瓶药,放置成31*31=961、6*6=36、3,这样的三堆,前两个分别是两个矩阵。
  • 我们知道小鼠喝了毒药的情况下,在一小时的时候,也就是3600秒的时候,会死亡,那么我们根据不同的时间差,第一个小鼠在不同的时间喝矩阵的行混合物,第二只在不同时间段喝列的混合物。
  • 假设第一只在第一小时零15秒的时候死亡,说明第一个矩阵的第15行内有毒药,第二只在1小时30秒的时候死亡,说明第一个矩阵的第30列有毒药,那么第一个矩阵的(15,30)号药水是毒药,因为只有一瓶毒药,不存在跨矩阵的情况。

6.3. Hay 1,000 botellas de poción, pero no sé cuántas botellas de veneno hay. Las ratas morirán en solo una hora después de beber el veneno. ¿Cómo probar cuántos venenos hay en las menos horas y en las menos ratas?

  • Esta pregunta es diferente de la pregunta anterior en que se desconoce el número de venenos. Si se usa una matriz bidimensional, la longitud es x ratones, el ancho es y ratones y cada ratón bebe la mezcla de pociones en la columna actual o en la fila actual, entonces si x + y ratones ¿Puedes probar x * y frascos de medicina?
    • 假设存在一瓶毒药,坐标为(x3,y5),那么一小时后,编号为x3和y5的老鼠会死亡
  • ¿Significa eso que si hay k botellas de veneno, podemos determinar cuántas botellas de veneno hay determinando las coordenadas basadas en los ratones muertos?
    • 然鹅并不是,假设存在这样一种情况,我们把k瓶毒药放置在矩阵所有的对角线上,一小时后,所有的小鼠全部死亡,能推断出来该矩阵全部有毒?
  • ¿Cómo puede ser eficaz?
    • 因为这道题是不知道多少瓶毒药,因此,存在一种可能性,有1000瓶毒药,那么最大需要1000只老鼠来测试,所以矩阵法失效,时间法也失效。
    • 目前一种比较实际的方法,但不一定是最好的方法是:1000瓶毒药放置成100*10的矩阵,用10只老鼠,按顺序每隔1秒喝当前列的100瓶药水中的一瓶,那么小鼠在某时间死亡,其后的药水需要重新进行测试。比如:100行*10列的药水,每一列编号1-100,第一只小鼠在第一秒喝第一瓶,第二秒喝第二瓶,假设一号小鼠在1小时56秒死亡,那么可以判定第一列的1-55瓶药水安全,56-100需要重新验证。

Supongo que te gusta

Origin blog.csdn.net/ljfirst/article/details/105884411
Recomendado
Clasificación