Junior — Middle
როგორ შეიძლება ორი სორტირებული სერია შეერთდეს ისე, რომ შედეგი დარჩეს სორტირებული?
sobes.tech AI
პასუხი AI-სგან
ორ სორტირებულ სერიის ერთობლიობა ერთ სორტირებულ სერიისადმი, შეგიძლიათ გამოიყენოთ შერწყმის ალგორითმი (merge), რომელიც მუშაობს ლინეურულ დროში.
იდეა:
- ორი სორტირებული მასივი ან სია არსებობს.
- თითოეულისთვის ვიყენებთ ორი მაჩვენებელს.
- ვადარებთ მიმდინარე ელემენტებს, უმცირესს ვამატებთ შედეგში და შესაბამის მაჩვენებელს ვაწევრებთ.
- ვიმეორებთ, სანამ ორივე მასივი არ გავივლით.
კოტლინში მაგალითი:
fun mergeSortedLists(a: List<Int>, b: List<Int>): List<Int> {
val result = mutableListOf<Int>()
var i = 0
var j = 0
while (i < a.size && j < b.size) {
if (a[i] <= b[j]) {
result.add(a[i])
i++
} else {
result.add(b[j])
j++
}
}
// დარჩენილი ელემენტების დამატება
while (i < a.size) result.add(a[i++])
while (j < b.size) result.add(b[j++])
return result
}