Merge Intervals
Bir aralık, başlangıcı ve sonu olan bir tam sayı aralığıdır. En az bir noktayı paylaşan aralıklar bir araya getirilir; yalnızca birbirine değen aralıklar da buna dahildir: [1, 4] ve [4, 5], [1, 5] olur. Amaç, çakışan her aralık grubunu tüm grubu kapsayan tek bir aralıkla değiştirmektir.
Püf noktası sıralamadır. Aralıklar başlangıçlarına göre sıralandığında, oluşturduğun aralıkla çakışan her şey hemen ardından gelir. Sıralı listeyi dolaş ve birleştirilmiş son aralığı tut: sonraki başlangıç, bu aralığın sonuna eşit veya ondan küçükse sonu genişlet; değilse gerçek bir boşluk vardır, bu yüzden yeni bir aralık başlar. Sıralama O(n log n) maliyetlidir ve listeyi dolaşmak tek geçişte tamamlanır.
mergeIntervals adlı, iki tamsayı dizisi olan starts ve ends dizilerini alan ve birleştirilmiş aralıkları döndüren bir fonksiyon yazın.
Her dil burada 2 boyutlu bir diziyi girdi olarak kabul etmediğinden aralıklar iki dizi olarak verilir: i aralığı [starts[i], ends[i]] şeklindedir ve her iki dizi de aynı uzunluktadır. Aralıklar sıralı değildir.
Örtüşen her aralık grubunu birleştirin. Yalnızca uç noktada birbirine değen aralıklar da örtüşen aralıklar sayılır. Birleştirilmiş aralıkları, başlangıç değerine göre sıralanmış 2 boyutlu bir dizi olarak [[start, end], ...] döndürün.
Örneğin, starts = [5, 1, 12, 3] ve ends = [7, 4, 14, 6] dizileri [5, 7], [1, 4], [12, 14] ve [3, 6] aralıklarını tanımlar; bunlar [[1, 7], [12, 14]] şeklinde birleşir.
Kısıtlamalar: 1 <= starts.length == ends.length <= 10^4, 0 <= starts[i] <= ends[i] <= 10^4.
Fonksiyon
- arg1integer-array
- arg2integer-array
- Döndürürinteger-2d-array
Örnekler
- Girdi
- arg1 = [5, 1, 12, 3]arg2 = [7, 4, 14, 6]
- Çıktı
- [[1, 7], [12, 14]]
- Girdi
- arg1 = [6, 1]arg2 = [9, 6]
- Çıktı
- [[1, 9]]
Gönderirken +12 gizli test
İpuçları
Tek tek açın. Her biri biraz daha fazlasını gösterir.
İlk olarak her başlangıcı bitişiyle eşleştir; böylece iki ayrı dizi yerine aralıkların tamamıyla çalışırsın.
Aralıkları başlangıç değerine göre sıralayın. Bundan sonra bir aralık yalnızca hemen önündeki grupla çakışabilir, daha gerideki bir grupla asla çakışamaz.
Son birleştirilmiş aralığı elde tutarak sıralanmış aralıklar boyunca ilerleyin. Sonraki başlangıç, bu aralığın bitişinden küçük veya eşitse bitişini iki bitişten büyük olana ayarlayın. Aksi takdirde bu grup tamamlanır ve sonraki aralık yeni bir grup başlatır.
Bu problemin tam çözüm anlatımı yakında geliyor.
Benzer problemler
Aynı fikirleri kullanan problemler. İki üçünü çözmek bir kalıbı kalıcı hale getirir.
Python
def mergeIntervals(starts, ends):
# Kodu buraya yazınDurum 1
Durum 2
Girdi
arg1 = [5, 1, 12, 3] arg2 = [7, 4, 14, 6]
Beklenen
[[1, 7], [12, 14]]