睡觉觉觉得 2023-08-20 17:16 采纳率: 85.2%
浏览 5
已结题

核酸检测(C++)!?‘’?】?

描述

幼儿园的老师组织同学们排队做核酸检测,为了防止队伍混乱,老师给每一位同学都分配了一个编号,希望同学们按照编号从小到大的顺序排队.



kid-queue.JPG



但是同学们在排队的时候并没有按照编号来排队.



对于某位同学来说,如果排在前面的其他某一位同学的编号比他的编号大,那么他们的编号就称为一对“逆序对”.



例如

1 4 3 2 5

队伍中“4 3” “4 2” “3 2”都是逆序对


输入
输入数据包括两行

第一行只有一个整数n(范围[1,10000]),表示学生人数

第二行n个整数,表示队伍中同学们的编号,编号范围[1,n],并且没有重复的编号.


输出
请输出队伍中一共有多少逆序对


输入样例 1 

5
1 4 3 2 5
输出样例 1

3
语言:C++

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-20 20:31
    关注

    【以下回答由 GPT 生成】

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    int mergeSort(vector<int>& nums, int start, int end) {
        if (start >= end) {
            return 0;
        }
    
        int mid = start + (end - start) / 2;
        int count = mergeSort(nums, start, mid) + mergeSort(nums, mid+1, end);
    
        vector<int> temp(end - start + 1);
        int i = start, j = mid + 1, k = 0;
        while (i <= mid && j <= end) {
            if (nums[i] <= nums[j]) {
                temp[k++] = nums[i++];
            } else {
                temp[k++] = nums[j++];
                count += mid - i + 1;
            }
        }
    
        while (i <= mid) {
            temp[k++] = nums[i++];
        }
    
        while (j <= end) {
            temp[k++] = nums[j++];
        }
    
        for (int i = start, k = 0; i <= end; i++, k++) {
            nums[i] = temp[k];
        }
    
        return count;
    }
    
    int main() {
        int n;
        cin >> n;
    
        vector<int> nums(n);
        for (int i = 0; i < n; i++) {
            cin >> nums[i];
        }
    
        int count = mergeSort(nums, 0, n - 1);
        cout << count << endl;
    
        return 0;
    }
    

    通过归并排序的方法,可以计算出数组中逆序对的数量。首先将数组分为两个部分,然后递归地计算每个部分中的逆序对数量,再将两个部分合并时,如果前半部分的数字比后半部分的数字大,则构成逆序对,并且计算逆序对的数量。最后将两个部分排序合并,得到整个数组的逆序对数量。时间复杂度为O(nlogn),空间复杂度为O(n)。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 8月29日
  • 已采纳回答 8月21日
  • 创建了问题 8月20日