在Java上为给定数组编写函数(糖果)

时间:2018-09-03 07:39:23

标签: java arrays function

我正在尝试解决这个问题。有什么想法吗?

编写函数

class Solution { public int solution(int[] T); }

在给定N个整数的数组T(代表所有类型的糖果)的情况下,返回给我N / 2个糖果给我的兄弟后,我可以吃的不同类型糖果的最大可能数量。 例如,给定 T= [3,4,7,7,6,6]

该函数应该返回3。对我来说,一种最佳策略是放弃一种类型4的糖果,一种类型7的糖果和一种类型6的糖果。其余的糖果将是[3,7,6]:三种不同类型的糖果。

给出:

T = [80, 80, 1000000000, 80, 80, 80, 80, 80, 80, 123456789]

该函数还应该返回3。在这里,我从10个糖果开始。我可以赠送5个类型8的糖果,其余的糖果将为[1000000000, 123456789, 80, 80, 80]。总共只有三种不同的类型,即80、1000000000和123456789。 针对以下假设编写有效的算法:     N是[2..100,000];范围内的整数     N是偶数 数组T的每个元素都是[1..1,000,000,000]范围内的整数。

1 个答案:

答案 0 :(得分:1)

我将为您提供解决方案的设计。您仍然必须设计细节(例如确定内部数据结构等)并编写解决方案的代码。您可以在进行时对设计/代码提出具体问题。

主要要点是:您要放弃最大数量的糖果类型。这将使您拥有最多的类型。

因此,首先,您要计算每种类型出现的次数。您可以通过对输入参数进行一次传递来实现。您将需要一个内部集合来保存结果。一旦有了,就可以按出现次数对集合进行排序。
现在,您从最高数量的类型开始对已排序的集合进行迭代。每次以数量1(这样您就给自己留下1个这种类型的糖果)作为您给兄弟的数量。并移至集合中的下一个条目,将数量减1直到达到所需的N / 2数字。