SORU
26 Ocak 2011, ÇARŞAMBA


Algoritma kesişen disk sayısı hesaplamak için

Aşağıdaki online test ama şimdi kaldırılmış İm sonrası için onun ok umut onun burada bir parçasıydı. StackOverflow akıllı insanlara soruyorum düşündüm cevabı ile mücadele ediyorum. Herhangi bir dili iyi!

2 boyutlu bir uçak, i-th disk gibi N diskleri çekiyoruz N dizisi verilmiş merkezi (0,ı) ve yarıçapı a[i] vardır. K-th disk ve j-inci disk bilgisayar, diyoruz

ve k-inci ve j-inci diskler, en az bir ortak noktası var.

Bir fonksiyon yazın

int number_of_disc_intersections(int[] A);

yukarıda açıklandığı gibi bir dizi N diskleri tanımlayan verilen, kesişen diskleri çift sayı verir. Örneğin, belirli=6 N ve

A[0] = 1
A[1] = 5
A[2] = 2
A[3] = 1
A[4] = 4
A[5] = 0

kesişen disklerin 11 çift vardır:

0th and 1st
0th and 2nd
0th and 4th
1st and 2nd
1st and 3rd
1st and 4th
1st and 5th
2nd and 3rd
2nd and 4th
3rd and 4th
4th and 5th

işlevi 11 dönmelidir. Eğer işlevini kesişen çift sayısı 10,000,000 aşması durumunda -1 ile dönmelidir. İşlevi N 10,000,000 aşmadığını varsayalım.

Bana yardım edecek kimse, bu konuda mümkün lütfen?

CEVAP
26 Ocak 2011, ÇARŞAMBA


Aralığının kavşak [i-A[i], i A[i]] sayısını bulmak istiyorum.

Sıralanmış bir dizi (X der) i-A[i] (ayrıca orada 8 ** değerine sahip bazı ekstra boşluk var) içeren korumak.

Şimdi dizi X yürümek, en soldaki aralığı (i.başlayarak e en küçük i-A[i]).

Geçerli aralığı, aralığı (10* yani *) sağ uç noktaya gidecek yeri görmek ikili bir arama yapın (rütbe olarak adlandırılır). Şimdi sola tüm unsurları kesişen biliyorsun.

Rütbe ile bir sayacı artırmak ve sayısı aralıkları ve öz kavşak çift istemeyiz olarak geçerli Konum (bir dizine varsayarak) çıkarın.

O(nlogn)zamanO(n)boşluk.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • androidandme

    androidandme

    10 Mart 2009
  • Dogbert files

    Dogbert file

    12 Ocak 2012
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009