Most worth you possibly can get hold of at index 0 by performing given operation

    0
    38


    Enhance Article

    Save Article

    Like Article

    Enhance Article

    Save Article

    Given an array nums[] of measurement N, Discover the most worth you possibly can obtain at index 0 after performing the operation the place in every operation improve 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 may carry out as many strikes as you want to (probably, zero).

    Examples:

    Enter: nums[] = {1, 2, 3}
    Output: 3
    Rationalization: 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

    Strategy: The issue might 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 can even begin iterating it from index 1 and if at any level nums[i] is discovered to be larger than the factor current at index 0, in response to 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 larger worth.

    Comply with the steps talked about under to implement the thought:

    • Retailer the preliminary worth current at index 0 in a variable.
    • Kind 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++

      

    #embrace <bits/stdc++.h>

    utilizing namespace std;

      

    int maximumValue(vector<int>& nums, int n)

    {

        

        int value_at_index_0 = nums[0];

      

        

        

        kind(nums.start() + 1, nums.finish());

      

        

        for (int i = 1; i < n; i++) {

      

            

            

            

            if (nums[i] > value_at_index_0) {

      

                

                value_at_index_0

                    += (nums[i] - value_at_index_0 + 1) / 2;

            }

        }

      

        

        return value_at_index_0;

    }

      

    int major()

    {

        vector<int> nums = { 1, 2, 3 };

        int N = nums.measurement();

      

        

        cout << maximumValue(nums, N);

      

        return 0;

    }

    Time Complexity: O(N * log N)
    Auxiliary Area: O(1)

    Associated Articles:

    LEAVE A REPLY

    Please enter your comment!
    Please enter your name here