2011-10-21 12 views
5

En una reciente entrevista me preguntaron:encontrar el elemento insertado en la lista

Si usted tiene 2 listas

listaA listaB

son cada uno el tamaño de 1000 y contienen los mismos elementos 1 - 1000. Si un elemento, N se agrega a la lista B, ¿cómo se puede determinar el valor de ese elemento?

Respondí correctamente diciendo que restar listB de la lista A y el resto sería el valor.

Luego dijo qué pasaría si acabamos de tener la lista B después de que se agregó N. ¿Cómo determinarías el valor que se agregó?

¡No he podido responder a esto! Debería saberlo, pero no puedo pensar en eso. La pista que dio fue hacer algo similar a como lo hice en el primer problema.

¿Alguna sugerencia?

+0

son los elementos {1,2,3} .... 1000? –

+1

"tamaño 1000 y contiene los mismos elementos 1 - 1000": ¿esto significa que cada lista contiene cada valor entre 1 y 1000 exactamente una vez, o significa que cada lista contiene 1000 elementos, cada elemento está en el rango 1 - 1000 , las dos listas contienen los mismos elementos (tal vez no en el mismo orden), pero puede haber engaños? Si el último entonces sin tener lista A, o la posibilidad de ver la lista B antes de que se agregue N, entonces claramente no es posible saber qué elemento se agregó a la lista B en último lugar. Si el primero, entonces el problema es simple, p. simplemente reste 500500 de la suma de los elementos de la lista B. –

+0

http: // betterexplained.com/articles/techniques-for-adding-the-numbers-1-to-100/ – vikingosegundo

Respuesta

2

Puede excluir XOR ambas listas y lo que sea nuevo (N) lo tendrá. Esta es la respuesta a la primera pregunta.

+0

Sí, es una buena idea y mucho mejor que sumar y restar entre sí. – segFault

2

Suma A en sumA. Inserta un nuevo elemento. Sume la lista ahora en sumB. Reste sumA de sumB. Viola es un instrumento musical.

+0

Sé el primero, pero no sé el segundo. Solo tengo listB ahora. – segFault

+0

Entendí la pregunta de que no mantienes 'listA' y' listB' en diff. Pero debes recordar * algo *, de lo contrario es imposible. Así que suma la 'listaA' * antes * agregas el elemento, recuerda la suma, luego suma la' listaB' después de agregar el elemento. Además, lo que dijo @SteveJessop: debes saber por el formato de pregunta cuál es la suma de 'listA'. – Amadan

1

Suponiendo que la lista no se ordena automáticamente al insertar elementos nuevos, puede determinar cuál es el nuevo elemento si sabe cuál es la implementación del método "Agregar" de la lista.

Si la lista agrega el nuevo elemento al agregarlo, sabrá que el nuevo elemento será el último elemento en la lista.

Si la lista agrega el nuevo elemento por pre-pendiente, usted sabe que el nuevo elemento será el primer elemento en la lista.

Si inserta el elemento en la lista, sabrá exactamente dónde está el elemento porque ha especificado la ubicación.

Si la lista inserta al azar el elemento al agregarlo, entonces no tiene suerte. En este caso, deberá tener algo para usar como comparación (la lista original).

Este es el resultado de un objeto no sólo tener estado, sino también tener un comportamiento .

0

Teniendo en cuenta que la mayor parte de lo que hago se basa SQL:

select * 
from listb b 
left outer join lista a on (a.id = b.id) 
where (a.id is null) 
Cuestiones relacionadas