zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 493 翻转对

    493. 翻转对

    给定一个数组 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位整数的表示范围内。

    PS:
    二分排序

    class Solution {
          private int cnt;
    
        public int reversePairs(int[] nums) {
            int len = nums.length;
            sort(nums, Arrays.copyOf(nums, len), 0, len - 1);
            return cnt;
        }
    
        private void sort(int[] src, int[] dest, int s, int e) {
            if (s >= e) {
                return;
            }
            int mid = (s + e) >> 1;
            sort(dest, src, s, mid);
            sort(dest, src, mid + 1, e);
            merge(src, dest, s, mid, e);
        }
    
        private void merge(int[] src, int[] dest, int s, int mid, int e) {
            int i = s, j = mid + 1, k = s;
            while (i <= mid && j <= e) {
                if ((long) src[i] > 2 * ((long) src[j])) {
                    cnt += mid - i + 1;
                    j++;
                } else {
                    i++;
                }
            }
            i = s;
            j = mid + 1;
            while (i <= mid && j <= e) {
                if (src[i] <= src[j]) {
                    dest[k++] = src[i++];
                } else {
                    dest[k++] = src[j++];
                }
            }
            while (i <= mid) {
                dest[k++] = src[i++];
            }
            while (j <= e) {
                dest[k++] = src[j++];
            }
        }
    }
    
  • 相关阅读:
    TF-IDF
    3.路径模板两张表设计
    6.订单支付回调接口
    5.创建订单并生成支付链接接口
    5.使用ES代替whoosh全文检索
    4.docker基本使用
    3.ubuntu安装docker
    2.课程全文检索接口
    1.搜索引擎工作原理
    7.视频播放页面接口开发
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075008.html
Copyright © 2011-2022 走看看