码迷,mamicode.com
首页 > 其他好文 > 详细

493 Reverse Pairs 翻转对

时间:2018-04-21 23:38:54      阅读:734      评论:0      收藏:0      [点我收藏+]

标签:范围   ems   lse   ==   net   eve   .com   script   rev   

给定一个数组 nums ,如果 i < j 且 nums[i] > 2*nums[j] 我们就将 (i, j) 称作一个重要翻转对。
你需要返回给定数组中的重要翻转对的数量。
示例 1:
输入: [1,3,2,3,1]
输出: 2
示例 2:
输入: [2,4,3,5,1]
输出: 3
注意:
    给定数组的长度不会超过50000。
    输入数组中的所有数字都在32位整数的表示范围内。
详见:https://leetcode.com/problems/reverse-pairs/description/

C++:

class Solution {
public:
    int reversePairs(vector<int>& nums) {
        int n = nums.size();
        if(n <= 1)
        {
            return 0;       
        }
        int cnt = 0;
        vector<int> b(nums.begin(), nums.begin() + n / 2);
        vector<int> c(nums.begin() + n / 2, nums.end());
        cnt += reversePairs(b);
        cnt += reversePairs(c);
        int ai = 0, bi = 0, ci = 0;
        while(ai < n)
        {
            if(bi < b.size() && (ci == c.size() || b[bi] <= c[ci]))
            {
                nums[ai++] = b[bi++];
            }
            else
            {
                long tmp2 = (long)c[ci]*2;
                int low = 0,high = b.size() - 1,pos = bi;
                while(low <= high)
                {
                    pos = (low + high)/2;
                    if((long)b[pos] == tmp2)
                    {
                        low++;
                    }
                    else if((long)b[pos] > tmp2)
                    {
                        high = pos - 1;
                    }
                    else
                    {
                        low = pos + 1;
                    }
                }
                if(low < b.size() && low >= 0 && (long)b[low] > tmp2)
                {
                    cnt += n/2 - low;
                }
                nums[ai++] = c[ci++];
            }
        }
        return cnt;
    }
};

 参考:https://blog.csdn.net/lin360580306/article/details/60326795

493 Reverse Pairs 翻转对

标签:范围   ems   lse   ==   net   eve   .com   script   rev   

原文地址:https://www.cnblogs.com/xidian2014/p/8904156.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!