Algorithm 在列表中查找升序三元组
我在一次节目采访中遇到了这个问题,现在还不知道 长度为n的列表,其中的元素都是无顺序的正整数。 找出所有可能的三元组(a,b,c),a 并分析算法的时间复杂度Algorithm 在列表中查找升序三元组,algorithm,list,Algorithm,List,我在一次节目采访中遇到了这个问题,现在还不知道 长度为n的列表,其中的元素都是无顺序的正整数。 找出所有可能的三元组(a,b,c),a
没有一种通用算法能比O(n^3)更快,因为给定一个不同元素的排序输入,那么输出将具有大小O(n^3),因此仅仅产生输出将需要时间成比例。事实上,即使是一个随机生成的整数列表,在常数因子之前也已经有n^3个三倍 在给定的条件下,您可以简单地按列表顺序迭代所有可能的三元组,并比较它们的排序顺序。这个朴素的解已经是它能渐近得到的最佳解(即O(n^3))
for(int i=0;i
我怀疑你的问题陈述中可能有抄写错误,或者这个问题应该是一个非常简单的简短编码练习。没有通用算法比O(n^3)更快,因为给定不同元素的排序输入,那么输出的大小将为O(n^3),因此仅仅产生输出将需要时间成比例。事实上,即使是随机生成的整数列表也会有n^3个三倍,直到常数因子 你可以简单地按列表顺序迭代所有可能的三元组,并比较它们的排序顺序
for(int i=0;i
我怀疑您的问题陈述中可能存在转录错误,或者这个问题应该是一个非常简单的简短编码练习。如果已知只有一小部分三元组(比如k),那么您可能更愿意通过存储指向前一个最小元素的指针来查找所有三元组 算法 准备一个空的数据结构(后面描述的可能选项) 准备一个长度为n的空数组B 然后,对于列表中的每个元素c:
count_greater_elements[i] = count_greater_elements[ NGE[i] ] + 1 if NGE[i] is defined
= 0 otherwise
最近的较小元素和计数可以用类似的方法计算。如果已知只有一小组三元组(比如k),那么您可能更愿意通过存储指向前一个最小元素的指针来查找所有三元组 算法 准备一个空的数据结构(后面描述的可能选项) 准备一个长度为n的空数组B 然后,对于列表中的每个元素c:
count_greater_elements[i] = count_greater_elements[ NGE[i] ] + 1 if NGE[i] is defined
= 0 otherwise
int calc(vector<int> numbers) {
int n = numbers.size();
vector<int> less(n), more(n);
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
if (numbers[i] < numbers[j])
less[j]++, more[i]++;
int res = 0;
for (int i = 0; i < n; i++)
res += less[i] * more[i];
return res;
}