Problem
You are given three positive integers: n
, index
, and maxSum
. You want to construct an array nums
(0-indexed) that satisfies the following conditions:
nums.length == n
nums[i]
is a positive integer where0 <= i < n
.abs(nums[i] - nums[i+1]) <= 1
where0 <= i < n-1
.- The sum of all the elements of
nums
does not exceedmaxSum
. nums[index]
is maximized.
Return nums[index]
of the constructed array.
Note that abs(x)
equals x
if x >= 0
, and -x
otherwise.
Examples
Example 1:
|
|
Example 2:
|
|
Solution
Method 1 - Binary Search
To solve this problem, we can use a binary search approach. The idea is to find the maximum value for nums[index]
while ensuring that all the conditions mentioned are satisfied.
Here is the approach:
- Initialization:
- We need a function to calculate the sum of the array based on a given peak (maximum possible value at
index
) and the constraints. - Use binary search to determine the maximum possible value at
index
.
- We need a function to calculate the sum of the array based on a given peak (maximum possible value at
- Binary Search:
- Perform binary search on the possible values of
nums[index]
from 1 tomaxSum
. - For each candidate value, check if the constructed array satisfies the
maxSum
constraint.
- Perform binary search on the possible values of
- Sum Calculation:
- Determine the sum of the segment to the left of
index
, includingindex
. - Determine the sum of the segment to the right of
index
. - Ensure the total sum does not exceed
maxSum
.
- Determine the sum of the segment to the left of
Code
|
|
|
|
Complexity
- ⏰ Time complexity:
O(log (maxSum))
- The binary search runs in
O(log(maxSum))
as it halves the search space each time. - For each candidate mid-value, the
isValid
function runs inO(1)
time, and its helper functionsum_helper
also runs inO(1)
.
- The binary search runs in
- 🧺 Space complexity:
O(1)