我在最近的一次采访中遇到了这个问题:
给定一个长度为N
的数组,我们需要找到最低成本,才能将该数组转换为漂亮的数组。
一个漂亮的数组是一个A1^f1 A2^f2 A3^f3 ...
形式的数组,其中所有Ai都是不同的,fi是它出现的次数。即{3^2 4^3 1^2} = {3,3,4,4,4,1,1}
允许的唯一操作是选择数组中的任何数字并将其所有出现的位置更改为新数字。运算成本是转换整数的频率。即{1,3,1,3,1} => {1,1,1,1,1}
。此处所有3均更改为1,并且操作成本为3 = 2。
约束:
1 <= N <= 100000
1 <= Ai <= 200000
例如
A = {1,1,2,3,2,3} => {1,1,2,2,2,2}. Total cost = 2 (3 changed to 2)
A = {2,2,2,2,4}. Total cost = 0 (already beautiful array)
我尝试过将所有元素的频率保持到数组中每个索引的频率。然后拿起每个数字出现的最末端,我增加了在这两个末端之间不出现的所有元素的出现频率。但是,正如预期的那样,这不是最佳解决方案。我们可以针对该问题采用哪种最佳方法?