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++];
            }
        }
    }
    
  • 相关阅读:
    Js 实现tab切换效果
    为什么要在html和body加上“height:100%;”
    ios html5 网页取消默认样式
    illustrator将图片转换成ai路径
    sublime的使用
    3- java修饰符
    5- java多态的动态绑定
    oracle中的exists 和not exists 用法详解
    LOG记录
    ora-20000:ORU-10027: buffer overflow
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075008.html
Copyright © 2011-2022 走看看