zoukankan      html  css  js  c++  java
  • 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基础知识
    谈谈休眠/睡眠/关机和laptop硬件寿命
    常用的git指令查询
    java swing scroll can not work
    不必要的windows服务
    工作分配问题
    回溯算法
    第四章上机实践
    算法第四章作业
    第三章上机实践
  • 原文地址:https://www.cnblogs.com/ZJPaang/p/12766320.html
Copyright © 2011-2022 走看看