由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - Count Inversions 求助
相关主题
question about big dataInsert bounding box
anybody remember this question?? (about sorting)求个amazon online assessment的题集
请教一下leetcode #321. Create Maximum Number问一个算法设计问题
透露两个G的onsite题请大家 看看这个 Merge k Sorted Lists (Java), 我不太明白
面试题目请教个LC的新题
一道面试题请教 找preference相似的用户请问leetcode Substring with Concatenation of All Words为什么runtime error
问一个关于merge sort的小细节变相的merge sort
感觉careercup上的mergesort很不简洁一个小公司面经
相关话题的讨论汇总
话题: arr话题: count话题: temp话题: mid话题: int
进入JobHunting版参与讨论
1 (共1页)
c*********i
发帖数: 46
1
http://www.geeksforgeeks.org/counting-inversions/
给出了代码,可是看了程序后, 有点不解,想请大牛指教一下:
/*this is tricky -- see above explanation/diagram for merge()*/
inv_count = inv_count + (mid - i);
不应该是:
inv_count = inv_count + (mid - i)+1?
当copy a[j]时,left array 剩下的都是inversion,不应该是(mid - i)+ 1 个吗?
int merge(int arr[], int temp[], int left, int mid, int right)
{
int i, j, k;
int inv_count = 0;
i = left; /* i is index for left subarray*/
j = mid; /* i is index for right subarray*/
k = left; /* i is index for resultant merged subarray*/
while ((i <= mid - 1) && (j <= right))
{
if (arr[i] <= arr[j])
{
temp[k++] = arr[i++];
}
else
{
temp[k++] = arr[j++];
/*this is tricky -- see above explanation/diagram for merge()*/
inv_count = inv_count + (mid - i);
}
}
/* Copy the remaining elements of left subarray
(if there are any) to temp*/
while (i <= mid - 1)
temp[k++] = arr[i++];
/* Copy the remaining elements of right subarray
(if there are any) to temp*/
while (j <= right)
temp[k++] = arr[j++];
/*Copy back the merged elements to original array*/
for (i=left; i <= right; i++)
arr[i] = temp[i];
return inv_count;
}
b******7
发帖数: 92
2
int merge(int arr[], int temp[], int left, int mid, int right)
{
int count = 0;
int i = left, j = mid, k= 0;
while(i < mid && j <= right){
if(arr[i] <= arr[j]){
temp[k++] = arr[i++];
count += j - mid;
}else{
temp[k++] = arr[j++];
}
}
while(i < mid){
temp[k++] = arr[i++];
count += j - mid;
}
while(j <= right){
temp[k++] = arr[j++];
}
for(int i = left; i <= right; i++){
arr[i] = temp[i-left];
}
return count;
}
r********d
发帖数: 7742
3
是mid-i还是mid-i+1取决于你把mid放到左边还是右边。左边就加一,右边就不加。

【在 c*********i 的大作中提到】
: http://www.geeksforgeeks.org/counting-inversions/
: 给出了代码,可是看了程序后, 有点不解,想请大牛指教一下:
: /*this is tricky -- see above explanation/diagram for merge()*/
: inv_count = inv_count + (mid - i);
: 不应该是:
: inv_count = inv_count + (mid - i)+1?
: 当copy a[j]时,left array 剩下的都是inversion,不应该是(mid - i)+ 1 个吗?
: int merge(int arr[], int temp[], int left, int mid, int right)
: {
: int i, j, k;

1 (共1页)
进入JobHunting版参与讨论
相关主题
一个小公司面经面试题目
re: 面试归来,上面经回馈各位战友一道面试题请教 找preference相似的用户
BB NON CS onsite面经问一个关于merge sort的小细节
求一下这题解法。感觉careercup上的mergesort很不简洁
question about big dataInsert bounding box
anybody remember this question?? (about sorting)求个amazon online assessment的题集
请教一下leetcode #321. Create Maximum Number问一个算法设计问题
透露两个G的onsite题请大家 看看这个 Merge k Sorted Lists (Java), 我不太明白
相关话题的讨论汇总
话题: arr话题: count话题: temp话题: mid话题: int