我有一個數組,可以說{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