Welcome to Subscribe On Youtube
3979. Maximum Valid Pair Sum
Description
You are given an integer array nums of length n and an integer k.
A pair of indices (i, j) is called valid if:
0 <= i < j < nj - i >= k
Return the maximum value of nums[i] + nums[j] among all valid pairs.
Example 1:
Input: nums = [1,3,5,2,8], k = 2
Output: 13
Explanation:
The valid pairs are:
(0, 2):nums[0] + nums[2] = 6(0, 3):nums[0] + nums[3] = 3(0, 4):nums[0] + nums[4] = 9(1, 3):nums[1] + nums[3] = 5(1, 4):nums[1] + nums[4] = 11(2, 4):nums[2] + nums[4] = 13
Thus, the answer is 13.
Example 2:
Input: nums = [5,1,9], k = 1
Output: 14
Explanation:
- Since
k = 1, every pair is valid. - The maximum value is obtained from a pair
(0, 2), which isnums[0] + nums[2] = 5 + 9 = 14. - Thus, the answer is 14.
Constraints:
2 <= n == nums.length <= 1051 <= nums[i] <= 1091 <= k <= n - 1
Solutions
Solution 1: Sliding Window
For a valid pair $(i, j)$, we require $j - i \geq k$, i.e., $i \leq j - k$. We enumerate the right endpoint $j$ starting from $k$. For each $j$, the maximum left endpoint is $j - k$. We maintain the maximum value $x$ of $\textit{nums}[i]$ in the range $[0, j - k]$, and update the answer with $x + \textit{nums}[j]$.
The time complexity is $O(n)$, and the space complexity is $O(1)$, where $n$ is the length of the array $\textit{nums}$.
-
class Solution { public int maxValidPairSum(int[] nums, int k) { int ans = 0; int x = 0; for (int j = k; j < nums.length; ++j) { int y = nums[j]; x = Math.max(x, nums[j - k]); ans = Math.max(ans, x + y); } return ans; } } -
class Solution { public: int maxValidPairSum(vector<int>& nums, int k) { int ans = 0; int x = 0; for (int j = k; j < nums.size(); ++j) { int y = nums[j]; x = max(x, nums[j - k]); ans = max(ans, x + y); } return ans; } }; -
class Solution: def maxValidPairSum(self, nums: list[int], k: int) -> int: ans = x = 0 for j in range(k, len(nums)): y = nums[j] x = max(x, nums[j - k]) ans = max(ans, x + y) return ans -
func maxValidPairSum(nums []int, k int) int { var ans, x int for j := k; j < len(nums); j++ { y := nums[j] x = max(x, nums[j-k]) ans = max(ans, x+y) } return ans } -
function maxValidPairSum(nums: number[], k: number): number { let [ans, x] = [0, 0]; for (let j = k; j < nums.length; ++j) { const y = nums[j]; x = Math.max(x, nums[j - k]); ans = Math.max(ans, x + y); } return ans; }