Easy
Find Indices With Index and Value Difference I — C++
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};
}
};