2011-10-21 24 views
5

w niedawnym wywiadzie zapytano mnie:Znajdź wstawiony element listy

Jeśli masz 2 list

Lista listB

Każdy są wielkości 1000 i zawierać te same elementy 1 - 1000. Jeśli element, N jest dodany do listy B, w jaki sposób można określić wartość tego elementu?

Odpowiadałem poprawnie, mówiąc, aby odjąć listę B z listy A, a pozostałą wartość.

Następnie powiedział, co jeśli mamy po prostu listę B po dodaniu N. Jak określiłbyś wartość, która została dodana?

Nie udało mi się odpowiedzieć na to pytanie !!!! Powinienem to wiedzieć, ale nie mogę o tym pomyśleć. Wskazówką, którą dał, było zrobienie czegoś podobnego do pierwszego problemu.

Wszelkie sugestie?

+0

Są elementy {1,2,3 .... 1000}? –

+1

"rozmiar 1000 i zawierają te same elementy 1 - 1000": czy oznacza to, że każda lista zawiera każdą wartość od 1 do 1000 dokładnie jeden raz, czy oznacza to, że każda lista zawiera 1000 elementów, każdy element jest w zakresie 1 - 1000 , obie listy zawierają te same elementy (być może nie w tej samej kolejności), ale mogą występować duplikaty? Jeśli ten ostatni, to bez listy A lub szansy na wyświetlenie listy B przed N, to oczywiście nie można wiedzieć, który element został dodany do listy B jako ostatni. Jeśli pierwszy, problem jest prosty, np. po prostu odejmij 500500 z sumy elementów z listyB. –

+0

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

Odpowiedz

2

Możesz mieć wyłączne XOR obie listy i wszystko, co jest nowe (N), które będziesz mieć. To jest odpowiedź na pierwsze pytanie.

+0

Tak, to jest dobry pomysł i znacznie lepiej niż dodawanie i odejmowanie od siebie. – segFault

2

Suma A w sumA. Wstaw nowy element. Zsumuj listę teraz do sumB. Odejmij sumA od sumB. Viola to instrument muzyczny.

+0

Znam pierwszy, ale nie znam drugiego. Mam teraz tylko listęB. – segFault

+0

Zrozumiałem pytanie, które nie powoduje, że 'listA' i' listB' zmieniają się. Ale musisz pamiętać * coś *, w przeciwnym razie jest to niemożliwe. Więc podsumuj 'listA' * przed * dodaj element, zapamiętaj sumę, a następnie dodaj' listB' po dodaniu elementu. Poza tym, co powiedział @SteveJessop - powinieneś wiedzieć przez format pytania, jaka jest suma 'listA'. – Amadan

1

Zakładając, że lista nie jest automatycznie sortowana podczas wstawiania nowych elementów, możesz określić, co to jest nowy element, jeśli wiesz, jaka jest implementacja metody "Dodaj" listy.

Jeśli lista doda nowy element przez dołączenie go, wiesz, że nowy element będzie ostatnim elementem na liście.

Jeśli na liście pojawi się nowy element czekając na niego, wiesz, że nowy element będzie pierwszym elementem na liście.

Po wstawieniu elementu do listy, wiesz dokładnie, gdzie znajduje się ten element, ponieważ podałeś lokalizację.

Jeśli lista zostanie losowo wstawiona po jej dodaniu, oznacza to, że nie masz szczęścia. W takim przypadku będziesz musiał użyć czegoś do porównania (oryginalnej listy).

Jest to wynik obiektu nie tylko o stan, ale również o zachowanie.

0

Biorąc pod uwagę, że większość z tego, co robię opiera SQL:

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