【发布时间】:2020-07-28 22:13:11
【问题描述】:
下面是我的代码,用于计算可以正常工作的不同 3 位字符串的数量,但是,我想优化此代码以提高时间复杂度。有人可以帮助我吗?
输入:[1,2,1,4]
输出:12
谢谢。
static int countUnique(String [] arr)
{
Set<String> s = new TreeSet<>();
for (int i = 0; i<arr.length; i++)
{
for (int j = 0; j<arr.length; j++)
{
for (int k = 0; k<arr.length; k++)
{
if (i!=j && j != k && i!=k)
s.add((arr[i] +""+arr[j]+""+arr[k]));
}
}
}
return s.size();
}
【问题讨论】:
-
您需要考虑算法,而不是使用蛮力。您可能想从这里开始:baeldung.com/java-combinatorial-algorithms 或谷歌“java 组合学教程”以获取其他来源。
-
我会说你的问题看起来像纯数学。提示:组合数学的基础知识就足够了。
-
@Ecto Basic 组合实际上不足以解决这个问题,即使它适用于一些看起来相似的问题。
-
为什么你的输入是字符串?您是否需要担心由多个不同的输入字符串集产生相同的输出字符串的情况(例如,您的输入是
[1, 12, 23, 3, 4],您可以从12+3+ 产生12344或1+23+4)?或者您只是使用字符串和连接作为一种简单的方法来为Set生成可比较的值? -
@KarlKnechtel OP 表示他们的代码工作正常。因此,输入的元素是单个数字,如 OP 的正确代码所示。任务限制为 3 位长度。
标签: java algorithm count time-complexity unique