我有一个数组,可以说{7,6,4,2}
。算法找不到。大小为n的子集,其中每个元素都小于其前一个元素,索引是第一个元素是最少的
我需要一个高效算法找到次数n
较小的数字发生在给定的元素之后,其中每个元素都小于前一个元素。
例如:对于n=3
,a[i]>a[j]>a[k]
和i < j < k
。这里的输出应该是{7,6,4}
,{7,6,2}
和{6,4,2}
。
我有一个简单的算法与3 for循环,但显然与O(n^3)
复杂性的解决方案是不可行的。
以下是我为n=3
创建的示例代码。
// Array is initialized and given values. Size of Array is n1
for(int i=0;i<n1-2;i++)
{
for(int j=i+1;j<n1-1;j++)
{
if(a[j]<a[i])
{
for(int k=j+1;k<n1;k++)
{
if(a[k]<a[j])
{
cnt++;
}
}
}
}
}
可否请你联系我的算法,我可以使用或我提供以下算法。 JAVA首选。
在你的代码,我不明白你为什么要测试的值是多少?不是你的数组排序?你有相同的价值吗? – 2015-02-05 17:07:41
数组不排序。你必须以相同的顺序找到它。是的,有重复的元素和计数器将每次重复也视为唯一的 – bholagabbar 2015-02-05 17:09:39
{7,6,11,2}的示例,n = 3的答案是{7,6,2} – bholagabbar 2015-02-05 17:11:15