• LeetCode 每日一题 04/24


    https://leetcode-cn.com/problems/shu-zu-zhong-de-ni-xu-dui-lcof/

    这个题最简单的解法就是直接双循环遍历数组,然后统计后者小于前者的对数。但是很明显这个O(N^2)的算法这里会T。

    然后我看了题解才发现这个题他们使用归并排序来解题,真的是万万没想到啊。

    官方解析已经很清晰了,而且还配有视频,这里就不说自己的理解了。

    这个题主要还是帮我复习了一下归并排序的实现,有些东西久了不用就容易生疏。

    class Solution {
        int res = 0;
    public int reversePairs(int[] nums) {
            if(nums == null || nums.length == 0){
                return  0;
            }
            int[] newNums = Arrays.copyOfRange(nums,0,nums.length);
            mergeSort(newNums,0,newNums.length-1);
            return res;
        }
    
        private void mergeSort(int[] nums, int l, int r){
            if(l >= r){
                return;
            }
            int mid = l + (r-l) / 2;
            mergeSort(nums,l,mid);
            mergeSort(nums, mid+1, r);
            merge(nums,l,mid,r);
        }
    
        private void merge(int[] nums,int start, int mid, int end){
            int i = start, j = mid+1;
            int k = 0;
            int[] temp = new int[end - start +1];
            while(i <= mid && j <= end){
                if(nums[i] <= nums[j]){
                    temp[k++] = nums[i];
                    i++;
                }else {
                    temp[k++] = nums[j];
                    res += (mid-i+1);
                    j++;
                }
            }
            while(i <= mid){
                temp[k++] = nums[i];
                i++;
            }
            while(j <= end){
                temp[k++] = nums[j];
                j++;
            }
            if (temp.length >= 0) System.arraycopy(temp, 0, nums, start, temp.length);
        }
    }
    View Code
  • 相关阅读:
    java将汉语转换为拼音工具类
    Maven 参数说明
    tcp socket的backlog参数
    Java 运行中jar包冲突,定位使用哪个jar包
    Java CMS GC
    数据仓库
    compareTo
    java程序性能分析之thread dump和heap dump
    npm 与 package.json 快速入门教程
    基本 Java Bean
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/12766320.html
Copyright © 2020-2023  润新知