2011-02-09 22 views
5

Rastgele sırayla bir tamsayılar listesi verildiğinde, her listenin öğelerinin toplamı arasındaki farkın maksimum olduğu ve iki yeni bağlantılı listelere bölünmesi Listenin uzunluğu 1'den fazla değildir (orjinal listenin tek sayıda eleman içermesi durumunda). Listedeki sayıların benzersiz olduğunu düşünemiyorum. ve sonra yürümek bir özyinelemeli işlevi kullanmak;Bağlantılı bir listeyi en küçük ve en büyük sayıları içeren 2 çift listeye ayırma

benim aklıma algoritması birleştirme özgün bağlantılı listesinde sıralama (log n) zaman, O (n) uzay O (n & middot) yapmak oldu uzunluğunu belirlemek için listenin sonu, özyineleme işlevi gevşerken bölmeyi yapmak. Yinelemeli işlev O (n) zaman ve O (n) boşluğudur.

Bu en uygun çözüm mü? Birisi alakalı olduğunu düşünürse kodumu gönderebilirim.

+0

Eğer senin bağlantılı liste uygulaması bir boyut özelliğini korur, daha sonra listeyi yarıya kadar kesmek için sadece listenin yarısına kadar yürütün. (Http://codereview.stackexchange.com adresini ziyaret etmek ister!) – Jeremy

+0

@Jeremy Heiler: Boyut özelliği yok, sadece çok sade bir jane temel bağlantılı liste, gerçekten birbirine bağlı düğümlerin bir demet daha fazla bir şey yok. –

+0

Sınavınız sınava tabi tutulmasını gerektirmediği sürece, sıralama işlemini yapmak için Collections.sort da kullanabilirsiniz. – karakuricoder

cevap

4

Hayır, en uygun değil; median of a list in O(n)'u bulabilir, daha sonra bunların yarısını bir listeye (ortanca veya eşit, liste büyüklüğü n/2'ye kadar küçük) ve bunların yarısını başka bir listede ((n + 1)/2) bulabilirsiniz. Onların toplamı farkı (n & middot maksimize ve sıralamak gerek (O orada olduğu;.. (N)) log Tüm şeyler O (n) (uzay ve zaman)

+0

Sağladığınız bağlantı, bu algoritmanın rasgele erişim dizilerine uygun olduğunu gösteriyor gibi görünüyor. Bunun bağlantılı listeler için çalıştığından emin misiniz? –

+0

@Robert S. Barnes: Gerekirse, listeyi önce bir diziye ve daha sonra da yine O (n) 'ye kopyalayabiliriz. –

+0

Medyan of Medians algoritmasının http://www.soe.ucsc.edu/classes/cmps102/Spring05/selectAnalysis.pdf adresindeki analizine dayanarak, dizideki elemanların benzersiz olmasını gerektirir. Bunu kabul edemem. –

1

Neden yapılacaktır Yinelemeli fonksiyona ihtiyacınız var mı? Liste sıralanırken, öğeleri sayabilirsiniz.Onlar sadece yarıya bölünür.Bu damla O (n) boşluk gereksinimi

Sıralama sırasında liste uzunluğunu sayayamıyor olsanız bile, yine de O (n) zaman ve O (1) uzayında bölünmüş olun: başlangıçta iki liste yineleyici alın, her adımda ilk 2 öğeyi ilerletin, her adımda ikinci 1 öğe.İlk listeye son ulaştığında - ikinci saniyede kesilir

+0

O (n) zamanında ayrılıyorum. O (n) alanı alır çünkü orijinal LL'nin kopyalarını yapıyorum. –

İlgili konular