Easy

Find Indices With Index and Value Difference IC++

Full explanation · Time O(n) · Space O(1)

// Time:  O(n)
// Space: O(1)

// prefix sum
class Solution {
public:
    vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference) {
        for (int i = 0, mx_i = 0, mn_i = 0; i + indexDifference < size(nums); ++i) {
            if (nums[i] > nums[mx_i]) {
                mx_i = i;
            } else if (nums[i] < nums[mn_i]) {
                mn_i = i;
            }
            // we don't need to add abs for the difference since
            // - if nums[mx_i]-nums[i+indexDifference] < 0, then checking nums[i+indexDifference]-nums[mn_i] >= -(nums[mx_i]-nums[i+indexDifference]) > 0 can cover the case
            // - if nums[i+indexDifference]-nums[mn_i] < 0, then checking nums[mx_i]-nums[i+indexDifference] >= -(nums[i+indexDifference]-nums[mn_i]) > 0 can cover the case
            if (nums[mx_i] - nums[i + indexDifference] >= valueDifference) {
                return {mx_i, i + indexDifference};
            }
            if (nums[i + indexDifference] - nums[mn_i] >= valueDifference) {
                return {mn_i, i + indexDifference};
            }
        }
        return {-1, -1};
    }
};