Given an array nums[] of measurement N, Discover the most worth you may obtain at index 0 after performing the operation the place in every operation enhance the worth at index 0 by 1 and reduce the worth at index i by 1 such that nums[0] < nums[i] (1 ≤ i ≤ N-1). You’ll be able to carry out as many strikes as you desire to (presumably, zero).
Examples:
Enter: nums[] = {1, 2, 3}
Output: 3
Clarification: nums[0] < nums[1], Due to this fact nums[0] + 1 and nums[1] – 1. Now, nums[0] = 2, nums[0] < nums[2], once more repeat the step. Now nums[0] turns into 3 which is the utmost potential worth we are able to get at index 0.Enter: nums[] = {1, 2, 2}
Output: 2
Method: The issue may be solved primarily based on the next concept:
With the intention to obtain most worth at index 0, kind the array from index 1 to the final index and may also begin iterating it from index 1 and if at any level nums[i] is discovered to be higher than the ingredient current at index 0, in accordance with the given operation nums[0] get elevated and nums[i] get decreased. So, nums[0] get elevated by the quantity (nums[i] – nums[0] + 1) / 2 when encountered with a higher worth.
Comply with the steps talked about under to implement the thought:
- Retailer the preliminary worth current at index 0 in a variable.
- Type the array from index 1 to the final index.
- Iterate from index 1 and if discovered nums[i] > nums[0], do the given operation
- Worth at index 0 will get elevated by the (nums[i] – nums[0] +1) / 2
- Return the worth at index 0 as the required reply.
Under is the implementation of the above method:
C++
|
Time Complexity: O(N * log N)
Auxiliary Area: O(1)
Associated Articles: