Experiencia de entrevista de Amazon para SDE | Fuera del campus (1-1.5 años de experiencia)

Ronda 1 (Ronda de codificación en línea): Esta ronda se llevó a cabo en Amcat. Hubo 2 preguntas de codificación.

  1. Dada la array 2D. Cada celda tiene un valor 0 o 1. 1 representa tierra y 0 representa agua. Encuentra el número de islas. 
    Ejemplo:  

    Input:  1 1 0
            0 1 0        
    Output: 2
            0 0 1

    Enfoque: DFS en array 2D y cuente cuántas veces tiene que hacer DFS para cubrir todos los 1.

  2. Tienes una array de registros. Cada registro es una string de palabras delimitada por espacios. Para cada registro, la primera palabra de cada registro es un identificador alfanumérico. Entonces tambien:

    Cada palabra después del identificador consistirá únicamente en letras minúsculas, o;

    • Cada palabra después del identificador constará únicamente de dígitos.
    • Llamaremos a estas dos variedades de registros registros de letras y registros de dígitos. Se garantiza que cada registro tenga al menos una palabra después de su identificador.

    Reordene los registros para que todos los registros de letras estén antes que cualquier registro de dígitos. Los registros de letras se ordenan lexicográficamente ignorando los identificadores, siendo el identificador utilizado en caso de empate. Los registros de dígitos deben colocarse en su orden original.

    logs = ["dig1 8 1 5 1",
            "let1 art can","dig2 3 6",
            "let2 own kit dig",
            "let3 art zero"]
    Output: ["let1 art can",
            "let3 art zero",
            "let2 own kit dig",
            "dig1 8 1 5 1",
            "dig2 3 6"]

    Enfoque: Registro de letras y registro numérico separados. Luego ordene el registro de letras usando su propio comparador y luego combine el registro de letras y el registro numérico. Después de resolver estas preguntas, hay una sección donde tengo que escribir el enfoque en palabras y tengo que escribir la complejidad del tiempo y el espacio. Después de eso, hubo una encuesta sobre la vida laboral y una sección de encuestas de retroalimentación. Después de esta ronda, recibí el correo de que borré la ronda de codificación en línea y esperé hasta que haya más comunicación.

Después de algunas semanas recibí el correo y programé tres rondas de entrevistas en un día.

Ronda 2 (en línea en Amazon Chime): la primera entrevistadora se presenta y luego yo me presento. Luego me hizo dos preguntas de codificación.

  1. Se proporciona una array con tamaño N, cada índice tiene un valor> = 0. Este valor representa cuántos pasos máximos puedo seguir. Tengo que encontrar varias formas de llegar al final de una array. Si no es posible, devuelve -1.

    Input: 1 2 1 4
    Output: 2

    Explicación: arr[0] = 1 entonces, solo puedo ir al índice 1
    arr[1] = 2 entonces, desde aquí puedo ir al índice 2 y 3.
    arr[2] = 1 desde aquí puedo ir al índice 3rd.
    caminos posibles para llegar al final de la array: 0->1->2->3
    0->1->3
    Respuesta: 2

    Enfoque: comience desde el final y vaya a los índices a los que es posible ir desde el índice actual y tome la suma del número de formas de llegar al final desde ese índice. Hágalo de todos los índices de derecha a izquierda y obtendrá la cantidad de formas de llegar al final de la array.

    Input: 1 2 1 4
    Output: 2 2 1 1

    Explicación:  

    • Para el tercer índice: ya termina, así que configúrelo como 1
    • 2do índice: arr[2] = 1 entonces, tome la suma del índice 3 de la respuesta y actualice la array de respuesta ans[2] = 1
    • 1er índice: arr[1] =2 entonces, tome la suma de los índices 2 y 3 de la array de respuestas ans[1] = 2
    • Índice 0: arr[0] = 1, entonces, tome la suma del índice 1 de la array de respuesta. respuesta[0] = 2;
    • Al final devuelve ans[0];
    • Edge case N=1 devuelve 0.
    • Complejidad de tiempo: O(n^2);
  2. Dados dos valores l y r. Tengo que encontrar números especiales entre la l y la r. Número especial: el dígito adyacente tiene una diferencia absoluta exacta de 1 número especial: 10, 12, 21, 23

    Entonces, primero di un enfoque de fuerza bruta. Atraviese de l a r y el número de cheque es un número especial o no. Este enfoque tiene una complejidad de tiempo O(n*(número de dígitos)). Entonces, ella me pidió que optimizara más. Entonces, le di algunos enfoques diferentes y, al final, le di un enfoque de cola para resolver este problema. 

    Enlace: https://www.geeksforgeeks.org/stepping-numbers/

Ronda 3 (en línea en Amazon Chime): en esta ronda, el entrevistador me hizo 3 preguntas de codificación y algunas preguntas de comportamiento. Comienza con una breve introducción mía y del entrevistador.

  1. Hay una array 2d de tamaño NxM. Cada celda tiene un valor positivo. de cada celda, solo puedo ir en diagonal hacia abajo o en diagonal hacia arriba. Tengo que encontrar la ruta de suma máxima desde la celda de la primera columna hasta la celda de la última columna. Le di el enfoque O(n^2) y ella quedó satisfecha con eso.

    C++

    int solution(vector<vector<int> > arr, int n, int m)
    {
        int dp[n][m];
      
        memset(dp, sizeof(dp), -1);
        int ans = 0;
        for (int col = 0; col < m; col++) {
            for (int row = 0; row < n; row++) {
                int temp = 0;
                if (row - 1 >= 0 && col - 1 >= 0)
                    temp = max(temp, dp[row - 1][col - 1]);
                if (row + 1 < n && col - 1 >= 0)
                    temp = max(temp, dp[row + 1][col - 1])
      
                dp[row][col] = arr[row][col] + temp;
                ans = max(ans, dp[row][col]);
            }
        }
      
        return ans;
    }
  2. Se da una array de tamaño n. n siempre es par. Hay dos jugadores A y B. Para cada turno, un jugador puede tomar un elemento desde el principio o el final de la array. Si un jugador toma uno de los elementos, lo suma a la suma de ese jugador y lo elimina de la array. Ambos jugadores están jugando de manera óptima. Tengo que encontrar la suma máxima lograda por el jugador A.

    Primero le di al enfoque exponencial usando la recursividad, la memorización adicional en él y hice el enfoque de arriba hacia abajo de DP. Estaba satisfecha con mi enfoque.

    Esta es una pregunta similar: https://www.geeksforgeeks.org/optimal-strategy-for-a-game-dp-31/

  3. Hay una array de strings. Toda la string en la array está en caja de camello. La abreviatura de cada string serán las letras mayúsculas de esa string. 

    Tengo que hacer que la API en la que la entrada sea una abreviatura y deba devolver todas las strings en las que la abreviatura tenga la abreviatura de entrada como prefijo. 

    Ejemplo:

    String array:
    GoodMorning
    Good
    GoodNight
    LightHouse
    Abbreviation of the above strings will be:
    GM
    G
    GN
    LH
    Query:
    Input: G
    Output: GoodMorning, Good, GoodNight
    Input: GM
    Output: GoodMorning

    Para esta pregunta, di dos enfoques. Primero usando un mapa. Donde almaceno la clave como prefijo de una abreviatura y el valor como un vector de string que tiene esta clave como prefijo en su abreviatura.
    El segundo enfoque que di para usar la estructura Trie Data. Me pidió que implementara un enfoque de mapa y escribiera la complejidad del espacio y el tiempo.

Después de eso, hizo algunas preguntas de comportamiento que se basan en los principios de liderazgo de Amazon. Esta entrevista dura alrededor de una hora y media.

Ronda 4 (en línea en Amazon Chime):  esta entrevista se basó completamente en los principios de liderazgo de Amazon. La entrevista comienza con una breve introducción mía y del entrevistador. Me preguntó sobre algunas situaciones a las que me enfrento en mi empresa actual y cómo las manejo y cuál fue el resultado de eso. Esta ronda fue una ronda más interactiva. Me hizo 2 pequeñas preguntas. Primero fue qué es hilo y proceso y la diferencia entre ellos. Luego me pidió que le explicara hashmap y hashtable. Sé que hashmap y hashtable es un concepto de JAVA y mi experiencia completa fue C++. Entonces me pidió que explicara la diferencia entre un mapa y un mapa desordenado y su funcionamiento interno. Esta entrevista dura alrededor de 40 min.

Después de 2 semanas de la tercera ronda, recibí el correo y configuré la cuarta ronda con el Gerente de desarrollo de software.

Ronda 5 (Bar Raiser) (en línea en Amazon Chime): el entrevistador era gerente de desarrollo de software y tenía 9 años de experiencia en Amazon. La entrevista comienza con una breve introducción mía y del entrevistador. 

  1. Hay una pequeña tienda de juguetes que puede contener juguetes Maximum X. El dueño de la tienda ha contratado a una compañía de juguetes que le dio suministro al dueño por tiempo. Entonces, en un momento en que llegaron juguetes nuevos, es posible que el total de juguetes aumentara más que el límite X. Entonces, el propietario tiene que quitar los juguetes que vienen primero en la tienda. El propietario tiene datos de venta del año anterior que muestran cuántos juguetes de tiempo específico se vendieron.

    Tengo que hacer una estructura de datos para dos consultas.

    • Cuando llegaron nuevos juguetes y el límite excede X, entonces qué juguetes se eliminarán.
    • Devuelve el juguete vendido máximo a partir de los datos del año pasado. Pero ese juguete debería estar presente en la tienda.

    Para la primera consulta, sugiero una estructura de datos de mapa y deque y para la segunda consulta, sugiero una estructura de datos de mapa y max_heap. Hablamos de este enfoque y quedó satisfecho con mi respuesta.

  2. Me hizo una pregunta de codificación. Hay un árbol binario. Tengo que actualizar el valor del Node del árbol binario a la suma del subárbol derecho. Los Nodes de hoja deben ser como son.

    Input                   Output
      1                       16
     2  3                   5    7 
    4 5 6 7                4  5 6 7
    
    

    C++

    int solution(Node* root){
        if(root == NULL) return;
            
          if(root->left==NULL && root->right==NULL)
              return root->data;
        
          int left_sum = solution(root->left);
          int right_sum = solution(root->right);
        
          int temp = root->data;
          
          root->data = right_sum;
            
        return left_sum + temp + right_sum; 
    }

Me hizo algunas preguntas de comportamiento basadas en los principios de liderazgo de Amazon. Tuvimos una discusión saludable sobre cada pregunta. Para cada pregunta de comportamiento, tengo que explicar la situación y cada situación se conecta con el proyecto actual de la empresa. Hizo muchas consultas y discutimos eso.

Después de algunos días recibí el correo de que estoy seleccionado para el perfil SDE-1 🙂

Puntas:

  • Sea interactivo, tanto como sea posible con el entrevistador. Si no sabe la solución a la pregunta, dígale al entrevistador de qué manera está pensando. Los entrevistadores son muy útiles si interactúas con ellos, te guiarán a la solución.
  • Escriba código limpio y listo para la producción y cubra todos los casos extremos. El entrevistador comprueba su solución con casos de prueba.
  • Primero, dé el enfoque de fuerza bruta y luego pase al enfoque optimizado. Para cada pregunta, quieren una solución optimizada

Gracias, GeeksforGeeks. Me ayudó mucho en la preparación.

La mejor de las suertes…

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *