educative.io

Alternate solution?

Hi, what about the solution where we compare the element values and move index accordingly?
I’m only looping k times and it’s working for various arrays I tried. Could you please review this solution?

    fun findKLargestPairs(nums1: IntArray, nums2: IntArray, k: Int): List<IntArray> {
        var result = mutableListOf<IntArray>()
        var i = 0
        var j = 0

        while (result.size < k) {
            result.add(intArrayOf(nums1[i], nums2[j]))
            if (i < nums1.lastIndex && nums1[i + 1] >= nums2[j]) {
                i++
            }
            else {
                i = 0
                j = if (j == nums2.lastIndex) { 0 ; i++ } else { j + 1 }
            }
        }
        return result
    }


fun main() {
    var l1 = intArrayOf(9, 8, 2)
    var l2 = intArrayOf(6, 3, 1)
    var result = findKLargestPairs(l1, l2, 3)
    print("Pairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")

    l1 = intArrayOf(5, 2, 1)
    l2 = intArrayOf(2, -1)
    result = findKLargestPairs(l1, l2, 3)
    print("\nPairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")

    l1 = intArrayOf(8, 7, 6)
    l2 = intArrayOf(2, -1)
    result = findKLargestPairs(l1, l2, 3)
    print("\nPairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")

    l1 = intArrayOf(8, 7, 6)
    l2 = intArrayOf(20, 11)
    result = findKLargestPairs(l1, l2, 3)
    print("\nPairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")

    l1 = intArrayOf(14)
    l2 = intArrayOf(20, 11)
    result = findKLargestPairs(l1, l2, 2)
    print("\nPairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")

    l1 = intArrayOf(20, 11, 8, 2)
    l2 = intArrayOf(14)
    result = findKLargestPairs(l1, l2, 2)
    print("\nPairs with largest sum are: ")
    for (pair in result) print("[" + pair[0] + ", " + pair[1] + "] ")
}
2 Likes

Hi Seth! Your solution doesn’t work when you have to advance in the first array but go backwards in the second, like in this example:
find_k_largest_pairs([10, 8], [9, 7], 3)

Expected: [[10, 9], [10, 7], [8, 9]]
Actual: [[10, 9], [10, 7], [8, 7]]