363 meneos

140 Preguntas que Google te puede hacer en una entrevista de trabajo. [EN]

Recopilación de preguntas que distintos entrevistados por Google han ido facilitando. Están agrupadas por áreas.

etiquetas: google, trabajo
negativos: 1   usuarios: 192   anónimos: 171  
compartir:  twitter  facebook  tuenti  
12siguiente »
  1. #102   Ahi va mi versión (espero que no quede muy mal al perder la identacion
    static int[] GoogleAnswer(int[] a)
    {
    int[] b = new int[a.Length];
    int var1 = 1;
    int var2 = 1;
    for (int i = 0; i < b.Length; i++) b[i] = 1; //inicializar valores de b a 1
    for (int i = 0, j = b.Length-1; i < b.Length; i++, j--)
    {
    b[i] *= var1;
    var1 *= a[i];
    b[j] *= var2;
    var2 *= a[j];
    }
    return b;
    }

    La idea es tener dos variables donde se van acumulando las multiplicaciones, una avanza por la izquierda, otra avanza por la derecha. A cada posición del vector b le corresponde lo que avanzo la variable por la izquierda (sin contarle a el) por lo que avanzo la variable por la derecha).

    Es decir, en el bucle, en vez de intentar calcular a cada paso el valor en una posición, calculad el valor de estas variables y multiplicarlo por lo que habia en esa posición en el vector (en realidad, se multiplica primero y luego se calcula var1 y var2 para que excluya el elemento a[i]). Hay que inicializar previamente todos los valores de b a 1.

    Yo utilizo i y j, podria usar solo i e ir restandolo de b.length-1, pero queda mas simple usando dos contadores.

    En total, tiempo O(n) con cuatro multiplicaciones y asignaciones en cada paso y sin necesitar arrays auxiliares, solo var1 y var2

    El codigo funciona (C#)

    Sigo buscando a quien me resuelva el como calcular los caracteres comunes de dos cadenas de texto en O(n) (o si lo preferis, elementos comunes en dos arrays de enteros no ordenados (el problema de google no especifica nada, pero ordenados es trivial)
    6  votos: 0   link
    el 16-11-2009 15:19 UTC por Razhan Razhan
  2. #103   #102 Vaya, yo acababa de hacer mi version:

    from Numeric import *;

    a=[2,4,6,8,10]
    b=zeros(len(a),Int)

    b[0]=1
    for i in range (1,len(a)):
    b[i]=a[i-1]*b[i-1]

    prev=1
    for i in range (len(a)-1,1,1):
    b[i]=b[i]*prev
    prev=prev*a[i]

    print a
    print b
    6  votos: 0   link
    el 16-11-2009 15:21 UTC por failure failure
  3. #104   #103 Maldito python y lo mal que se ve en foros y demas, pero si, la idea es la misma
    6  votos: 0   link
    el 16-11-2009 15:25 UTC por Razhan Razhan
  4. #105   #102 Felicitaciones! Versión en python:
    def arreglar4(a):
    ciclos=0
    b=[1 for x in a]
    var1 = 1
    var2 = 1
    ....
    largo=len(a)
    j=largo-1
    for i in range(0,largo):
    <------>b[i]*=var1
    <------>var1*=a[i]
    <------>b[j]*=var2
    <------>var2*=a[j]
    <------>ciclos+=1
    <------>j-=1
    print b
    print ciclos
    6  votos: 0   link
    el 16-11-2009 15:36 UTC por rarmas rarmas
  5. #106   #87 Tu solución es la siguiente:

    Procedure trabajarengoogle (var a,b: array of integer ; m,i:integer);
    begin
    trabajarengoogle (a, b, m*a[i], i+1);
    b[i]:= m;
    end;

    El problema no es que la complejidad del problema no sea O(n), sino que lo que contiene cada elemento de la matriz b no es lo que pide le problema: "bi = a1*a2*...*an/ai".

    Por ejemplo, en tu propuesta, la primera posición de b tiene el valor 1, la segunda posición tiene a1, la tercera posición tiene a1 * a2, etc...
    6  votos: 0   link
    el 16-11-2009 17:37 UTC por mikibcn mikibcn
  6. #107   #67 ya decia yo que me sonaba... xD
    8  votos: 0   link
    el 16-11-2009 17:39 UTC por LesPaul LesPaul
  7. #108   #106 llegas tarde, me entere en #98 :-P
    6  votos: 0   link
    el 16-11-2009 18:12 UTC por Diay Diay
  8. #109   #14 Por cierto, con todo el respeto del mundo, resolveríais eso en matemática discreta con ecuaciones diofánticas, pero eso en mi colegio se llamaba cálcular el minimo común multiplo de 17 y 16 (sumar 1 para la respuesta), y luego a la respuesta la factorizas y el divisor mayor (imagino que eso en Discreta sería un cero, pero recuerda a la EGB)
    6  votos: 0   link
    el 16-11-2009 18:23 UTC por Razhan Razhan
  9. #110   #108 OUCCHHHHH!!!! jejejeje
    Pero yo lo he argumentado algo más :-P

    No veas que rayada llevamos todos con el problemita de los Coj...googles
    6  votos: 0   link
    el 16-11-2009 18:27 UTC por mikibcn mikibcn
  10. #111   #56 El truco está en ir almacenando los resultados intermedios

    a1 * a2
    a1 * a2 * a3
    ...

    para no tener que recarculando.

    De todas formas que no cuente Google conmigo. Voy a hacer mi propio buscador y se van a enterar. Pondré noticias de Ronaldo, tetas, culos y la crisis y triplicaré las visitas a Google.
    8  votos: 0   link
    el 16-11-2009 18:30 UTC por PythonMan8 PythonMan8
  11. #112   #111 Haré mi propio buscador! Con casinos! Y furcias!
    14  votos: 1   link
    el 16-11-2009 19:42 UTC por Razhan Razhan
12siguiente »
comentarios cerrados

menéame