作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Possible Duplicate:
Counting inversions in an array
这是我几个月前接受一家公司面试开发人员职位时遇到的编程问题。
给定一个由N个整数组成的数组A,该数组的求反定义为任意一对索引(a,b),使得a
编写一个函数:
int inversion_count(int A[], int n);
它计算A中的求反数,如果该数超过1,000,000,000,则返回-1。例如,在以下数组中
A[0]=-1 A[1]=6 A[2]=3 A[3]=4 A[4]=7 A[5]=4
有四个反转:
(1,2) (1,3) (1,5) (4,5)
因此该函数应返回4。
我以一种非常常见的方式解决了这个问题:使用双循环。
int i, j;
long count;
for (i = 0; i < n; i++) {
for (j = i+1; j < n; j++) {
if (A[i] > A [j]) count++;
if (count > 1000000000) break; // exit loop
}
if (count > 1000000000) break; // exit loop
}
if (count > 1000000000) return -1;
else return count;
因此它的运行时间是:O(nsquare),并被告知效率不高。我现在正在考虑解决该问题的另一种方法,也许使用 n log n 算法,但是我还没有弄清楚。有任何想法吗?
我正在大学学习“软件模式和设计”类(class),该类(class)的书是“企业应用程序架构模式 - Fowler” 星期三的考试,老师没有任何过去的考试,我可以通过考试看看考试会是什么样子。 有人学
我是一名优秀的程序员,十分优秀!