Задача F из Яндекс.Интервью

Как осуществить слияние k сортированных списков

Тут есть условие задачи но там суть вопроса другая, мне же важно понять почему происходит то что я описал ниже

Проблема в том что код не проходит даже первый тест, хотя у меня она проходит все тесты через модуль тестирования, я предполагаю что проблема в горгутинах

package main

import (
    "bufio"
    "io"
    "os"
    "strconv"
    "strings"
)

func main(){
    MainFunc("input.txt","output.txt")
}

func MainFunc(input string,output string){
    file,_ := os.Open(input)
    r := bufio.NewReader(file)

    chanStr := make(chan []int,64)
    chanLines := make(chan int)
    finish := make(chan []int)

    var lines = -1

    go mergeArray(chanLines,chanStr,finish)

    for {
        str, err := r.ReadString('\n')
        str = strings.TrimRight(str,"\n")
        if lines == -1 {lines,_ = strconv.Atoi(str);chanLines<-lines;continue}
        go func(chanStr chan []int,str string){
            var resultArr = make([]int,101)
            arr := strings.Split(str," ")
            var num int
            for k,val := range arr{
                if k==0{continue}
                num,_ =strconv.Atoi(val)
                resultArr[num]++
            }
            chanStr<-resultArr
        }(chanStr,str)
        if err == io.EOF{
            break
        }
    }

    fileOut,_ := os.Create(output)
    arr := <- finish
    for key,val := range arr{
        if val == 0 {continue}
        for i:=0;i<val;i++{fileOut.WriteString(strconv.Itoa(key)+" ")}
    }
}

func mergeArray(chanLines chan int, chanStr chan []int, finish chan []int){
    var lines = <- chanLines
    var count int
    var lastArr []int
    var secondArr bool
    LOOP:
    for arr := range chanStr{
        if lines-1 == count {
            finish <- arr
            break LOOP
        }
        if !secondArr{
            lastArr = arr
            secondArr = !secondArr
        } else {
            go Merge(lastArr,arr,chanStr)
            secondArr = !secondArr
            count++
        }
    }

}

func Merge(arr1 []int,arr2[]int,chanStr chan []int){
    for k := range arr1{
        arr1[k] = arr1[k]+arr2[k]
    }
    chanStr <- arr1
}

Если переписать на синхронную модель данный алгоритм, то он спокойно доходит до 20 теста и там уже ему не хватает времени (Выполняется более 1 секунды)

Подскажите в чем может быть проблема, и какие нюансы я упускаю


Ответы (0 шт):