Skip to content

Commit 46f5dd7

Browse files
authored
Create find-indices-with-index-and-value-difference-ii.cpp
1 parent cab8263 commit 46f5dd7

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Time: O(n)
2+
// Space: O(1)
3+
4+
// prefix sum
5+
class Solution {
6+
public:
7+
vector<int> findIndices(vector<int>& nums, int indexDifference, int valueDifference) {
8+
for (int i = 0, mx_i = 0, mn_i = 0; i + indexDifference < size(nums); ++i) {
9+
if (nums[i] > nums[mx_i]) {
10+
mx_i = i;
11+
} else if (nums[i] < nums[mn_i]) {
12+
mn_i = i;
13+
}
14+
// we don't need to add abs for the difference since
15+
// - 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
16+
// - 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
17+
if (nums[mx_i] - nums[i + indexDifference] >= valueDifference) {
18+
return {mx_i, i + indexDifference};
19+
}
20+
if (nums[i + indexDifference] - nums[mn_i] >= valueDifference) {
21+
return {mn_i, i + indexDifference};
22+
}
23+
}
24+
return {-1, -1};
25+
}
26+
};

0 commit comments

Comments
 (0)