IT序号网

c之编程面试题(数组倒置)

arxive 2024年08月12日 编程语言 16 0

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 算法,但是我还没有弄清楚。有任何想法吗?

评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!