【问题标题】:Given an array of integers. Find the Inversion Count in the array给定一个整数数组。查找数组中的反转计数
【发布时间】:2021-09-05 07:08:08
【问题描述】:

我试图解决这个问题,但我得到了错误的答案 反转计数:对于数组,反转计数表示数组距离排序的距离(或接近)。如果数组已经排序,则反转计数为 0。如果数组以相反的顺序排序,则反转计数为最大值。 形式上,如果 a[i] > a[j] 并且 i ,则两个元素 a[i] 和 a[j] 形成一个反转。

enter link description here

class Solution
{
    // arr[]: Input Array
    // N : Size of the Array arr[]
    //Function to count inversions in the array.
    static long count = 0;
    static long inversionCount(long arr[], long n)
    {
        // Your Code Here
        long merged[] = mergeSort(arr, 0, n - 1);
        return count;
    }
    static long[] merge(long left[], long right[])
    {
        long res[] = new long[left.length + right.length];
        long i = 0, j = 0, k = 0;
        while (i < left.length && j < right.length)
        {
            if (left[(int)i] <= right[(int)j])
            {
                res[(int)k] = left[(int)i];
                k++;
                i++;
            }
            else
            {
                count = count + (left.length - i);
                res[(int)k] = right[(int)j];
                k++;
                j++;
            }
        }
        while (i < left.length)
        {
            res[(int)k] = left[(int)i];
            i++;
            k++;
        }
        while (j < right.length)
        {
            res[(int)k] = right[(int)j];
            k++;
            j++;
        }
        while (i < left.length)
        {
            res[(int)k] = left[(int)i];
            i++;
            k++;
        }
        return res;
    }
    static long[] mergeSort(long a[], long lo, long hi)
    {
        if (hi == lo)
        {
            long temp[] = {a[(int)hi], };
            return temp;
        }
        long mid = (hi + lo) / 2;
        long left[] = mergeSort(a, lo, mid);
        long right[] = mergeSort(a, mid + 1, hi);
        long merged[] = merge(left, right);
        return merged;
    }
}

【问题讨论】:

  • 你的代码有什么问题?当你运行它时会发生什么,你期望会发生什么?有什么错误吗?见How to Ask
  • 请修剪您的代码,以便更容易找到您的问题。请按照以下指南创建minimal reproducible example

标签: java arrays mergesort


【解决方案1】:

由于 gfg 使用许多测试用例来检查您的代码,因此您在第一个测试用例中得到的答案会保留在静态变量(计数)中,并且永远不会被重置。

所以只有第一个测试用例是正确的,其余的测试用例得到错误的答案。

因此请尝试在方法外部声明计数变量并在方法内启动它。每当执行新的测试用例时,您的计数变量将重置为零。

    static long count;
    static long inversionCount(long arr[], long n)
    {
        // Your Code Here
        count = 0;
        long merged[] = mergeSort(arr, 0, n - 1);
        return count;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    相关资源
    最近更新 更多