【數組】A052_面試題51. 數組中的逆序對 (暴力 / 分治 / 歸併排序)

一、Problem

在數組中的兩個數字,如果前面一個數字大於後面的數字,則這兩個數字組成一個逆序對。輸入一個數組,求出這個數組中的逆序對的總數。

輸入: [7,5,6,4]
輸出: 5

限制:
0 <= 數組長度 <= 50000

二、Solution

方法一:暴力(超時)

總運算量 5405^{40},能不超時?

public int reversePairs(int[] nums) {
    Set<int[]> set = new HashSet<>();
    for (int i = 0; i < nums.length; i++)
    for (int j = i+1; j < nums.length; j++) {
        if (nums[i] > nums[j]) {
            int[] a = new int[]{nums[i], nums[j]};
            if (!set.contains(a)) 
                set.add(a);
        }
    }
    return set.size();
}

複雜度分析

  • 時間複雜度:O(n2)O(n^2)
  • 空間複雜度:O(n)O(n)

方法二:


複雜度分析

  • 時間複雜度:O()O()
  • 空間複雜度:O()O()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章