Wizmann / ACM-ICPC

感觉自己做了假题。
http://wizmann.tk
Other
63 stars 29 forks source link

Leetcode 1675. Minimize Deviation in Array #108

Open Wizmann opened 3 years ago

Wizmann commented 3 years ago

Description

Problem

给定一个正整数数组A。规定以下两种操作:

每一个操作可以执行任意次。问在若干次操作之后,max(A[]) - min(A[])的最小值。

Solution

首先研究对A[i]的两种操作。

如果A[i]是偶数,那么它只能除2,直到结果为奇数为止。如果A[i]是奇数,它只能进行一次乘2操作,因为乘2之后A[i]就变成偶数了。

所以对于所有的数,其变化范围有:

因此数组变化后的上下界是确定的。 假设已经确定了变化后数组的最小值x。所以对于A[i] < x,则必须进行扩大操作,使其等于大于等于x的最小值。这样一来,我们确定了下界,同时使上界尽可能小,保证了解是最优的。

实现方法如下:

首先把A[i]化为其最小值,每次取出最小值做为下界,最大值做为上界,求当前上下界的差。 然后:

Code