[Solved] Find Indices With Index and Value Difference I Java ,C++,Python

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:

  • abs(i - j) >= indexDifference, and
  • abs(nums[i] - nums[j]) >= valueDifference

Return an integer array answerwhere answer = [i, j] if there are two such indicesand 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:

  • 1 <= n == nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= indexDifference <= 100
  • 0 <= valueDifference <= 50

Solution

Java

  public int[] findIndices(int[] A, int d, int v) {
        int mini = 0, maxi = 0, n = A.length;
        for (int i = d; i < n; i++) {
            if (A[i - d] < A[mini]) mini = i - d;
            if (A[i - d] > A[maxi]) maxi = i - d;
            if (A[i] - A[mini] >= v) return new int[] {mini, i};
            if (A[maxi] - A[i] >= v) return new int[] {maxi, i};
        }
        return new int[] { -1, -1};
    }

C++

 vector<int> findIndices(vector<int>& A, int d, int v) {
        int mini = 0, maxi = 0, n = A.size();
        for (int i = d; i < n; i++) {
            if (A[i - d] < A[mini]) mini = i - d;
            if (A[i - d] > A[maxi]) maxi = i - d;
            if (A[i] - A[mini] >= v) return {mini, i};
            if (A[maxi] - A[i] >= v) return {maxi, i};
        }
        return { -1, -1};
    }

Python

 def findIndices(self, A: List[int], d: int, valueDifference: int) -> List[int]:
        mini = maxi = 0
        for i in range(d, len(A)):
            if A[i - d] < A[mini]: mini = i - d
            if A[i - d] > A[maxi]: maxi = i - d
            if A[i] - A[mini] >= valueDifference: return [mini, i]
            if A[maxi] - A[i] >= valueDifference: return [maxi, i]
        return [-1, -1]

Happy Learning – If you require any further information, feel free to contact me.

Share your love
Saransh Saurav

Saransh Saurav

Articles: 68

Leave a Reply

Your email address will not be published. Required fields are marked *