排序---P1116 车厢重组

news2024/11/27 12:46:39

P1116 车厢重组

来自 <车厢重组 - 洛谷>

其实这道题本质上就是求逆序对的过程:

两种方法:一个是通过冒泡排序过程求逆序对;一个是通过归并排序过程求逆序对。

法一:当通过冒泡排序进行正序排列时,相邻两个数需要进行交换时,则说明这是一个逆序对,逆序对++。

import java.util.Scanner;



/**

 * 用冒泡思想算逆序对,每次进行交换时,逆序对++

 */

public class Main {

    public static void main(String[] args) {

        int n,ans=0;

        Scanner scanner=new Scanner(System.in);

        n = scanner.nextInt();

        int[] a=new int[n];

        for(int i=0;i<n;i++){

            a[i]=scanner.nextInt();

        }

        for(int i=1;i<=n-1;i++){

            for(int j=0;j<=n-1-i;j++){

                if(a[j]>a[j+1]){

                    int t=a[j];

                    a[j]=a[j+1];

                    a[j+1]=t;

                    ans++;

                }

            }

        }

        System.out.println(ans);

    }

}

法二:归并排序,逆序对=左边有序数列的逆序对+右边有序数列的逆序对+处于左右两边的逆序对

 

import java.util.Scanner;



/**

 * 用归并的思路算逆序对

 */

public class Main {

    public static int n;

    public static int[] a=new int[100005];

    public static int[] temp=new int[100005];

    public static void main(String[] args) {

        Scanner scanner=new Scanner(System.in);

        n=scanner.nextInt();

        for(int i=0;i<n;i++){

            a[i]=scanner.nextInt();

        }

        System.out.println(merge_sort(0,n-1));

    }

    public static int merge_sort(int l,int r){

        if(l>=r){

            return 0;

        }

        int mid=(l+r)/2;

        int res=merge_sort(l,mid)+merge_sort(mid+1,r);

        int i=l,j=mid+1,k=0;

        while(i<=mid&&j<=r){

            if(a[i]<=a[j]){

                temp[k++]=a[i++];

            }

            else{

                res+=mid-i+1;

                temp[k++]=a[j++];

            }

        }

        while(i<=mid){

            temp[k++]=a[i++];

        }

        while (j<=r){

            temp[k++]=a[j++];

        }

        for(i=l,j=0;i<=r;i++,j++){

            a[i]=temp[j];

        }

        return res;

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1056006.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

批量将文件名称符合要求的文件自动复制到新文件夹:Python实现

本文介绍基于Python语言&#xff0c;读取一个文件夹&#xff0c;并将其中每一个子文件夹内符合名称要求的文件加以筛选&#xff0c;并将筛选得到的文件复制到另一个目标文件夹中的方法。 本文的需求是&#xff1a;现在有一个大的文件夹&#xff0c;其中含有多个子文件夹&#x…

Redis与分布式-集群搭建

接上文 Redis与分布式-哨兵模式 1. 集群搭建 搭建简单的redis集群&#xff0c;创建6个配置&#xff0c;开启集群模式&#xff0c;将之前配置过的redis删除&#xff0c;重新复制6份 针对主节点redis 1&#xff0c;redis 2&#xff0c;redis 3都是以上修改内容&#xff0c;只是…

C++位图—布隆过滤器

目录 位图概念位图应用 布隆过滤器简介布隆过滤器的优缺点布隆过滤器应用场景布隆过滤器实现布隆过滤器误判率分析 总结 位图概念 位图是一种数据结构&#xff0c;用于表示一组元素的存在或不存在&#xff0c;通常用于大规模数据集的快速查询。它基于一个位数组&#xff08;或位…

管理经济学基本概念(二): 规模经济、需求曲线、供给曲线等

1、关键术语 1.1、边际报酬递减规律 边际报酬递减规律是指随着产出量的扩大&#xff0c;边际生产率(与增量投入要素相联系的增量产出量)最终会下降。 递增的边际生产率意味着边际成本递增。 递增的边际成本最终导致平均成本递增。 1.2、规模经济 (1) 如果长期平均成本相对…

打开泰坦陨落2找不到msvcp120.dll无法执行代码/msvcr120.dll丢失修复方法

msvcp120.dll 是 Windows 操作系统中的一个动态链接库文件&#xff0c;对于许多程序和游戏的运行起着至关重要的作用。然而&#xff0c;有时候我们可能会遇到 msvcp120.dll 丢失的情况&#xff0c;导致电脑出现各种问题。本文将详细介绍 msvcp120.dll 丢失的四种解决方法&#…

【项目】5.1阻塞和非阻塞、同步和异步 5.2Unix、Linux上的五种IO模型

5.1阻塞和非阻塞、同步和异步&#xff08;网络IO&#xff09; 典型的一次IO的两个阶段是什么&#xff1f;数据就绪和数据读写 数据就绪&#xff1a;根据IO操作的就绪状态 阻塞非阻塞 数据读写&#xff1a;根据应用程序和内核的交互方式 同步异步 陈硕&#xff1a;在处理IO的…

【小沐学Python】各种Web服务器汇总(Python、Node.js、PHP、httpd、Nginx)

文章目录 1、Web服务器2、Python2.1 简介2.2 安装2.3 使用2.3.1 http.server&#xff08;命令&#xff09;2.3.2 socketserver2.3.3 flask2.3.4 fastapi 3、NodeJS3.1 简介3.2 安装3.3 使用3.3.1 http-server&#xff08;命令&#xff09;3.3.2 http3.3.3 express 4、PHP4.1 简…

选择排序算法:简单但有效的排序方法

在计算机科学中&#xff0c;排序算法是基础且重要的主题之一。选择排序&#xff08;Selection Sort&#xff09;是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤&#xff0c;并提供Java语言的实现示例。 选择排序的原理 选择排序的核心思想是不断地从…

网络工程师怎么才算开窍

做网络工程师怎么样才算开窍&#xff1f;刚才有个朋友他说他希望从事网络工程师之后若干年。比如说当他到35岁的时候&#xff0c;他不希望出现跟今天现在是2023年&#xff0c;今年的这种裁员潮里面所遇到的那些主人公&#xff0c;就是技术学的也不错&#xff0c;然后工作也不错…

37 二叉树的最大深度

二叉树的最大深度 题解1 深度优先搜索&#xff08;递归弹栈&#xff09;题解2 广度优先搜索&#xff08;队列&#xff09; 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 提示&#xff1a; 树中节点…

阿里云PolarDB自研数据库详细介绍_兼容MySQL、PostgreSQL和Oracle语法

阿里云PolarDB数据库是阿里巴巴自研的关系型分布式云原生数据库&#xff0c;PolarDB兼容三种数据库引擎&#xff1a;MySQL、PostgreSQL、Oracle&#xff08;语法兼容&#xff09;&#xff0c;目前提供云原生数据库PolarDB MySQL版、云原生数据库PolarDB PostgreSQL版和云原生数…

使用 Python 的多项 Logistic 回归问题

一、说明 多项逻辑回归是一种统计方法&#xff0c;用于预测两个以上类别的分类结果。当因变量是分类变量而不是连续变量时&#xff0c;它特别有用。 二、分类预测 在多项式逻辑回归中&#xff0c;模型预测属于因变量每个类别的观测值的概率。这些概率可以解释为观察结果属于每…

聊聊并发编程——原子操作类和Fork/Join框架

目录 原子操作类 实现原子性原理 保证原子性的方法 Fork/Join框架 分而治之 工作窃取算法 Fork/Join框架的设计 示例 原子操作类 线程A和线程B同时更新变量i进行操作i1,最后的结果可能i不等于3而是等于2。这是线程不安全的更新操作&#xff0c;一般我们会使用Synchron…

CCF CSP认证 历年题目自练Day18

CCF CSP认证 历年题目自练Day18 题目一 试题编号&#xff1a; 201809-1 试题名称&#xff1a; 卖菜 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   在一条街上有n个卖菜的商店&#xff0c;按1至n的顺序排成一排&#xff0c;这…

如何保持终身学习

文章目录 2.1. 了解你的大脑2.2 学习是对神经元网络的塑造2.3 大脑的一生 3.学习的心里基础3.1 固定思维与成长思维3.2 我们为什么要学习 4. 学习路径4.1 构建知识模块4.2 大脑是如何使用注意力的4.3 提高专注力4.4 放松一下&#xff0c;学的更好4.5 巩固你的学习痕迹4.6 被动学…

amazon自养号测评:为卖家提供稳定转化率的解决方案

亚马逊作为全球最大的跨境电商平台之一&#xff0c;吸引了大量卖家进入市场。然而&#xff0c;如何提高产品的转化率&#xff0c;吸引更多买家并促使他们下单&#xff0c;对卖家来说仍然是一个关键问题。本文将分享一些亚马逊卖家可以采用的小技巧&#xff0c;帮助他们实现这一…

Nginx之动静分离解读

目录 基本概念 基本入门 location匹配顺序 补充&#xff1a;URLRewrite 基本概念 动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来&#xff0c;动静资源做好了拆分以后&#xff0c;我们就可以根据静态资源的特点将其做缓存操作&#x…

2023八股每日一题(九月份)

9月13日 Q&#xff1a;JDK、JRE、JVM之间的区别 A&#xff1a; JDK(Java SE Development Kit)&#xff0c;Java标准开发包&#xff0c;它提供了编译、运⾏Java程序所需的各种⼯具和资源&#xff0c;包括Java编译器、Java运⾏时环境&#xff0c;以及常⽤的Java类库等JRE( Java…

jQuery入门学习

jQuery框架 jQuery是一个快速的、简洁的JavaScript框架&#xff08;库&#xff09;&#xff0c;它会封装很多JavaScript中常用的功能代码&#xff0c;提供了一个简洁的JS设计模式 优化HTML文档操作&#xff08;优化DOM操作&#xff09;事件处理动画设计Ajax 要使用JQ我们需要…

MySQL进阶_3.性能分析工具的使用

文章目录 第一节、数据库服务器的优化步骤第二节、查看系统性能参数第三节、 慢查询日志第四节、 查看 SQL 执行成本第五节、 分析查询语句&#xff1a;EXPLAIN 第一节、数据库服务器的优化步骤 当我们遇到数据库调优问题的时候&#xff0c;可以按照以下流程进行分析。整个流程…