• 【算法题目】数组中的逆序对


      题目来源:《剑指offer》面试题36

      题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这两个数组中的逆序对的总数。例如数组{7,5,6,4}中,一共存在5个逆序对,分别是(7,6),(7,5),(7,4),(6,4)和(5,4)。

      下面把《剑指offer》的分析贴上来:

      

                                    

                                                                                           

      代码:

    int CountInversionPair(vector<int>& nums) {
        if (nums.size() <= 1) return 0;
    
        int count = 0;
        CountInversionPair(nums, 0, nums.size() - 1, count);
        return  count;
    }
    
    void CountInversionPair(vector<int> &nums, int start_pos, int end_pos,
                            int &count) {
        if (start_pos >= end_pos)
            return;
    
        int mid = start_pos + (end_pos - start_pos) / 2;
        CountInversionPair(nums, start_pos, mid, count);
        CountInversionPair(nums, mid + 1, end_pos, count);
        Merge(nums, start_pos, mid, end_pos, count);
    }
    
    void Merge(vector<int>& nums, int start_pos, int mid,  int end_pos, int &count) {
        if (start_pos == end_pos)
            return;
    
        vector<int> temp_nums(end_pos - start_pos + 1);
    
        int left_index = mid;
        int right_index = end_pos;
        int original_index = end_pos - start_pos;
    
        while (left_index >= start_pos && right_index > mid) {
            if (nums[left_index] > nums[right_index]) {
                count += right_index - mid;
                temp_nums[original_index--] = nums[left_index--];
            } else {
                temp_nums[original_index--] = nums[right_index--];
    
            }
        }
        
        for (; left_index >= start_pos; left_index--)
            temp_nums[original_index--] = nums[left_index];
    
        for (; right_index > mid; right_index--)
            temp_nums[original_index--] = nums[right_index];
    
        for (int i = start_pos, j = 0; i <= end_pos; i++) {
            nums[i] = temp_nums[j++]; 
        }
    
    }
  • 相关阅读:
    0802作业1替换文本文件内容

    看病
    爬山
    作业1
    超市(未完成)
    图片复制
    替换
    文件
    英文字母和中文汉字在不同字符集编码下的字节数
  • 原文地址:https://www.cnblogs.com/vincently/p/4823154.html
Copyright © 2020-2023  润新知