有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使所有数组元素相等的最小递增操作数

我正在geek for geeks网站上阅读this问题

问题是找到数组中的最小移动次数,使所有元素相等

We are given an array consisting of n elements. At each operation you can select any one element and increase rest of n-1 elements by 1. You have to make all elements equal performing such operation as many times you wish. Find the minimum number of operations needed for this.

Examples:

Input : arr[] = {1, 2, 3}
Output : Minimum Operation = 3
Explanation : 
operation | increased elements | after increment
    1     |    1, 2            | 2, 3, 3
    2     |    1, 2            | 3, 4, 3
    3     |    1, 3            | 4, 4, 4

Input : arr[] = {4, 3, 4}
Output : Minimum Operation = 2
Explanation : 
operation | increased elements | after increment
     1    |    1, 2           | 5, 4, 4
     2    |    2, 3           | 5, 5, 5

链接解释了我们必须使用公式minOperation = sum - (n * small)来得到答案,其中sum是数组中所有元素的总和,n是数组中的元素数,small是数组中最小的元素

你能帮我理解这个公式表示什么吗?它是如何解决这个问题的


共 (1) 个答案

  1. # 1 楼答案

    我已经用二进制搜索解决了这个问题

    def main():
    #codechef question SALARY 
    t = input()
    t = int(t)
    while t > 0:
        n = input()
        n = int(n)
        val = list(map(int, input().split(" ")))
        initial_sum = sum(val)
        min_value = min(val)
        left = 0
        right = 10000000000
        while left <= right:
            mid = (left + right) // 2
            may_be = initial_sum + (mid * (n-1))
            mean = may_be / n
            diff = mean - min_value
            if diff == mid:
                break
            elif diff < mid:
                right = mid - 1
            else:
                left = mid + 1
        print(mid)
        t -= 1
    

    如果name='main': main()