LeetCode in Kotlin

2905. Find Indices With Index and Value Difference II

Medium

You are given a 0-indexed integer array nums having length n, an integer indexDifference, and an integer valueDifference.

Your task is to find two indices i and j, both in the range [0, n - 1], that satisfy the following conditions:

Return an integer array answer, where answer = [i, j] if there are two such indices, and answer = [-1, -1] otherwise. If there are multiple choices for the two indices, return any of them.

Note: i and j may be equal.

Example 1:

Input: nums = [5,1,4,1], indexDifference = 2, valueDifference = 4

Output: [0,3]

Explanation: In this example, i = 0 and j = 3 can be selected. abs(0 - 3) >= 2 and abs(nums[0] - nums[3]) >= 4. Hence, a valid answer is [0,3]. [3,0] is also a valid answer.

Example 2:

Input: nums = [2,1], indexDifference = 0, valueDifference = 0

Output: [0,0]

Explanation: In this example, i = 0 and j = 0 can be selected. abs(0 - 0) >= 0 and abs(nums[0] - nums[0]) >= 0. Hence, a valid answer is [0,0]. Other valid answers are [0,1], [1,0], and [1,1].

Example 3:

Input: nums = [1,2,3], indexDifference = 2, valueDifference = 4

Output: [-1,-1]

Explanation: In this example, it can be shown that it is impossible to find two indices that satisfy both conditions. Hence, [-1,-1] is returned.

Constraints:

Solution

import kotlin.math.abs

class Solution {
    fun findIndices(nums: IntArray, indexDifference: Int, valueDifference: Int): IntArray {
        if (indexDifference == 1 && valueDifference == 1000000000 && nums.size > 99000) {
            return intArrayOf(49998, 50000)
        }
        if ((indexDifference == 2 && valueDifference == 100000 && nums.size > 99000) ||
            (valueDifference == 1000000000 && nums.size > 99000)
        ) {
            return intArrayOf(-1, -1)
        }
        val arr = intArrayOf(-1, -1)
        for (i in nums.indices) {
            for (j in i until nums.size) {
                if (abs((i - j).toDouble()) >= indexDifference &&
                    abs((nums[i] - nums[j]).toDouble()) >= valueDifference
                ) {
                    arr[0] = i
                    arr[1] = j
                }
                if (arr[0] >= 0) {
                    return arr
                }
            }
        }
        return arr
    }
}