Загрузка данных


fun containsNumber(
    array: ArrayList<Int>,
    number: Int
): Boolean {

    for (item in array) {

        if (item == number) {
            return true
        }
    }

    return false
}


fun main() {

    val array1 = arrayOf(
        5, 3, 8, 1, 2,
        7, 4, 9, 6, 10,
        3, 5, 2, 8, 1
    )

    val array2 = arrayOf(
        15, 12, 11, 14, 13,
        10, 9, 8, 7, 6,
        5, 4, 3, 2, 1
    )


    // ----------------------------
    // СПОСОБ 1
    // ----------------------------

    val result1 = ArrayList<Int>()

    for (number in array1) {

        if (!result1.contains(number)) {
            result1.add(number)
        }
    }

    for (number in array2) {

        if (!result1.contains(number)) {
            result1.add(number)
        }
    }

    result1.sort()

    println("Способ 1:")
    println(result1)


    // ----------------------------
    // СПОСОБ 2
    // ----------------------------

    val result2 = ArrayList<Int>()

    for (number in array1) {

        if (!containsNumber(result2, number)) {
            result2.add(number)
        }
    }

    for (number in array2) {

        if (!containsNumber(result2, number)) {
            result2.add(number)
        }
    }


    // Пузырьковая сортировка

    for (i in 0 until result2.size - 1) {

        for (j in 0 until result2.size - i - 1) {

            if (result2[j] > result2[j + 1]) {

                val temp = result2[j]

                result2[j] = result2[j + 1]

                result2[j + 1] = temp
            }
        }
    }

    println("Способ 2:")
    println(result2)
}



fun findSubArray(
    array: Array<Int>,
    k: Int
): Int {

    for (start in array.indices) {

        var sum = 0

        for (end in start until array.size) {

            sum += array[end]

            if (sum == k) {
                return start
            }
        }
    }

    return -1
}


fun main() {

    val array = Array(50) { i ->
        i + 1
    }

    val k = 42

    val index = findSubArray(array, k)

    println("Индекс первого вхождения подмассива = $index")
}


import kotlin.random.Random


fun maxDifferenceBuiltIn(array: Array<Int>): Int {

    var maxDifference = Int.MIN_VALUE

    for (i in 0 until array.size - 1) {

        val rightPart =
            array.copyOfRange(i + 1, array.size)

        val maxAfter =
            rightPart.maxOrNull()!!

        val difference =
            maxAfter - array[i]

        if (difference > maxDifference) {
            maxDifference = difference
        }
    }

    return maxDifference
}


fun maxDifferenceManual(array: Array<Int>): Int {

    var min = array[0]

    var maxDifference =
        array[1] - array[0]

    for (i in 1 until array.size) {

        val difference =
            array[i] - min

        if (difference > maxDifference) {
            maxDifference = difference
        }

        if (array[i] < min) {
            min = array[i]
        }
    }

    return maxDifference
}


fun main() {

    val array = Array(100) {
        Random.nextInt(-100, 101)
    }

    println("Массив:")
    println(array.joinToString())

    println()
    println(
        "Способ 1: ${maxDifferenceBuiltIn(array)}"
    )

    println(
        "Способ 2: ${maxDifferenceManual(array)}"
    )
}


fun countManual(
    array: Array<Int>,
    number: Int
): Int {

    var count = 0

    for (item in array) {

        if (item == number) {
            count++
        }
    }

    return count
}


fun main() {

    val array = arrayOf(
        3, 7, 2, 7, 3,
        1, 2, 7, 1, 3,
        5, 5, 7, 3, 2,
        1, 5, 7, 3, 2
    )


    // -----------------------
    // СПОСОБ 1
    // -----------------------

    val result1 = array.copyOf()

    result1.sortWith(
        compareByDescending<Int> { number ->

            array.count { it == number }

        }.thenBy { number ->

            number
        }
    )

    println("Способ 1:")
    println(result1.joinToString())


    // -----------------------
    // СПОСОБ 2
    // -----------------------

    val result2 = array.copyOf()

    for (i in 0 until result2.size - 1) {

        for (j in 0 until result2.size - i - 1) {

            val first = result2[j]
            val second = result2[j + 1]

            val firstCount =
                countManual(array, first)

            val secondCount =
                countManual(array, second)


            if (
                firstCount < secondCount ||
                firstCount == secondCount &&
                first > second
            ) {

                val temp = result2[j]

                result2[j] = result2[j + 1]

                result2[j + 1] = temp
            }
        }
    }


    println("Способ 2:")
    println(result2.joinToString())
}