最小操作次数使数组相同

原题在这里

  概述题意,给定一个数组,每次操作能使n-1个数字增加1,问最少多少次能让数组内所有元素相同。

analyse:

  这题居然是简单题,我确实没想到,做了很久,

  正向思考:每次处理n-1个元素+1

  反向思考:每次处理1个元素-1

那么正向加到相同,等于反向减到最小。

code:

class Solution
{
public:
    int minMoves(vector<int> &nums)
    {
        /*
        一直选中最大元素累加,直到全部相同
        正加有n-1个
        反转思考
        反减有1个即可
        所有元素累减,直到与最小值相同
        */
        int ans = 0, x = nums[min_element(nums.begin(), nums.end()) - nums.begin()];
        for (int i : nums)
            ans += abs(i - x);
        return ans;
    }
};

【Over】

posted @ 2022-04-16 14:57  Renhr  阅读(193)  评论(0)    收藏  举报