zoukankan      html  css  js  c++  java
  • 493 Reverse Pairs 翻转对

    给定一个数组 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

  • 相关阅读:
    来自Ext的UI边界识别函数constrain
    js模拟静态方法
    ExtJs 带参数的MVC
    call
    Ext表单验证
    【Web入门系列】初探HttpServletResponse
    【Web入门系列】初探HttpServletRequest
    【Java入门系列】面向对象特性-多态
    【Java入门系列】final关键字
    【Java入门系列】static关键字
  • 原文地址:https://www.cnblogs.com/xidian2014/p/8904156.html
Copyright © 2011-2022 走看看