首页 > 编程语言 >Java 21和Java 8在洛谷上的区别

Java 21和Java 8在洛谷上的区别

时间:2024-11-15 19:16:11浏览次数:3  
标签:arr 洛谷 21 temp int long ++ Java left

Java 21默认开大内存

很容易遇到

所以如果换成Java 8

最后一个我也不知道为啥,有大佬帮忙看一下吗

逆序对 - 洛谷

import java.util.*;

public class Main {

    static Scanner cin = new Scanner(System.in);

    // 非递归版本的归并排序,返回逆序对的数量
    public static long mergeAndCount(long[] arr) {
        int n = arr.length;
        long count = 0;
        long[] temp = new long[n];
        
        // 分治排序的步长从1开始,一步一步增大
        for (int size = 1; size < n; size *= 2) {
            for (int left = 0; left < n - size; left += 2 * size) {
                int mid = Math.min(left + size - 1, n - 1);
                int right = Math.min(left + 2 * size - 1, n - 1);
                count += merge(arr, temp, left, mid, right);
            }
        }
        
        return count;
    }

    // 合并两个已排序的子数组并计算逆序对
    public static long merge(long[] arr, long[] temp, int left, int mid, int right) {
        int i = left, j = mid + 1, k = left;
        long count = 0;

        // 归并排序
        while (i <= mid && j <= right) {
            if (arr[i] <= arr[j]) {
                temp[k++] = arr[i++];
            } else {
                temp[k++] = arr[j++];
                count += (mid - i + 1); // 计算逆序对
            }
        }

        // 复制剩余的元素
        while (i <= mid) {
            temp[k++] = arr[i++];
        }
        while (j <= right) {
            temp[k++] = arr[j++];
        }

        // 将合并后的元素拷贝回原数组
        System.arraycopy(temp, left, arr, left, right - left + 1);

        return count;
    }

    public static void main(String[] args) {
        int n = cin.nextInt();
        long[] arr = new long[n];

        // 输入数组
        for (int i = 0; i < n; i++) {
            arr[i] = cin.nextLong();
        }

        // 计算逆序对的数量
        long result = mergeAndCount(arr);

        // 输出结果
        System.out.println(result);
    }
}

标签:arr,洛谷,21,temp,int,long,++,Java,left
From: https://blog.csdn.net/2402_87451294/article/details/143806210

相关文章

  • JavaFX史上最全教程 - Shape - JavaFX路径
    JavaFX有其他内置的形状,如ArcCircleCubicCurveEllipseLinePathPolygonPolylineQuadCurveRectangleSVGPathText以下代码显示了如何创建路径。importjavafx.application.Application;importjavafx.geometry.Insets;importjavafx.scene.Group;importjavafx.scene.Scene;......
  • Loom开篇:Java 虚拟机的协程和延续
    在jdk19发布的时候,java推出了一种全新的线程模型。说是全新的也只是针对java自己而言的。实际上其他语言早就有了类似的实现。这个东西其实就是协程,在java中叫做虚拟线程。jdk中虚拟线程主要是projectloom(以下称为loom)实现的。本文我们针对一篇jdk博客的翻译来打开虚拟......
  • java 反序列化 cc7 复现
    复现环境:common-collections版本<=3.2.1,java版本随意.cc7就是cc6换了一个出口,整体的逻辑没有太大的变化.在Lazymap之前的还那样,我们从如何触发Lazymap的get方法开始看起.AbstractMap看他的equals方法publicbooleanequals(Objecto){if(o==this)ret......
  • 洛谷 P1365 WJMZBMR打osu! / Easy 做题记录
    设\(len\)表示当前的期望连击数,设\(ans\)为当前的答案,我们分类讨论来更新\(ans\):当现在打到了这个音符,那么\(ans\toans+(len+1)^2-len^2=ans+len\times2+1\)。当现在没打到这个音符,那么\(ans\)不变。当现在不知道打没打到,那么\(ans\toans+\frac{(len\times2......
  • JAVA部分基础知识点(四)【持续更新】
    1.方法重写当子类觉得父类中的某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆善父类的这个方法,这就是方法重写。【注意:重写后,方法的访问,Java会遵循就近原则】方法重写的其它注意事项:重写小技巧:使用Override注解,他可以指定java......
  • Java概述
    1.Java程序编写和执行的过程:步骤1:编写。Java代码编写在.Java结尾的文件中。步骤2:编译。格式:javac源文件名.java步骤3:运行。格式:java字节码文件名2.编写的说明:classHelloWorld{publicstatic.void.main(String[]args){System.out.println("helloworld!!你好中国!");}......
  • JAVA植物大全网站和百度AI植物智能识别系统(开题报告+作品+论文)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......
  • 代理模式在JavaScript中的恋爱应用笔记
    一、引言在面向对象编程的世界里,代理模式犹如一位巧妙的媒人,巧妙地连接了两个对象之间的交互,而无需直接显式地引用彼此。这种模式不仅降低了系统的耦合度,还使得代码更加灵活、可扩展。而在JavaScript的世界里,代理模式更是展现出了其独特的魅力。今天,我将结合恋爱场景,为大家......
  • 解码JavaScript作用域:var a = 1; 背后的故事
    1、引言JavaScript是一种广泛使用的编程语言,其灵活的语法和强大的功能使其成为前端开发的首选语言。然而,对于初学者来说,理解JavaScript中的作用域机制可能会有些困难。本文将通过一句简单的代码vara=1;,深入解析JavaScript的执行机制和作用域管理。2、变量声明与......
  • 21-网络设备安全
    21.1概况1)交换机安全威胁交换机是构成网络的基础设备,主要的功能是负责网络通信数据包的交换传输MAC地址泛洪(flooding):通过伪造大量的虚假MAC地址发往交换机ARP(地址解析协议(AddressResolutionProtocol)包)欺骗:攻击者可以随时发送虚假ARP包更新被攻击主机上的ARP缓存,进......