【LeetCode】剑指 Offer(26)

news2024/10/6 14:38:26

目录

题目:剑指 Offer 51. 数组中的逆序对 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过啦!!!

写在最后:


题目:剑指 Offer 51. 数组中的逆序对 - 力扣(Leetcode)

题目的接口:

class Solution {
public:
    int reversePairs(vector<int>& nums) {

    }
};

解题思路:

这一道题,我的思路是用双指针暴力求解,

但这个数组长度,O(N^2)的时间复杂度肯定是不可能把所有样例跑完,

看了大佬的思路,用的是归并排序,(如果不会归并排序,最好先去学一下)

我一开始看了很久没有搞明白为什么,

实际上,这个思路是利用的归并排序的一个特性,具体思路如下:

例: 数组 [ 7, 5, 2, 6, 0, 1, 5, 4 ]

我们就拿这个数组归并到最后一步的时候作为样例:

[ 2, 5, 6, 7 ] 和 [ 0, 1, 4, 5 ]

由于他们通过先前的归并已经是两个有序的数组,

而最后一步就两个数组每个元素比大小,然后尾插到临时数组上,最后再拷贝回来,

重点来了:

第一个数比大小 2 > 0 所以尾插 0 并让第二个数组的下标begin2++,

因为这两个是升序数组,2 > 0,也表明 2 之后的所有数都大于 0 ,

那么这里就有 4 ( mid + 1,也就是第一个数组的长度) 个逆序数对,

那么,当 2 和 4 比较,2 < 4 ,就尾插 2 进临时数组,让第一个数组下标begin1++,

这个时候,继续往下比较,5 > 4, 尾插 4 并让第二个数组的下标begin2++,

因为这两个是升序数组,5 > 4,也表明 5 之后的所有数都大于 4,

但是因为第一个数组已经是第二个数了,所以:

这里就有 3 ( mid + 1 - begin1 (也就是减去第一个数组的下标))个逆序数对。

综上所述,

我们只需要在第一个数组的值 > 第二个数组的值的时候,记录逆序数对 (mid + 1 - begin1) 即可。

下面是代码:

代码:

class Solution {
public:
    //计数
    int res = 0;
    int reversePairs(vector<int>& nums) {
        //创建临时数组
        vector<int> tmp(nums.size());
        //归并排序,我用的是我学的归并排序模板
        merge_sort(nums, tmp, 0, nums.size() - 1);
        return res;
    }
private:
    void merge_sort(vector<int>& nums, vector<int>& tmp, int begin, int end) {
        if(begin >= end) return; //返回

        //分治
        int mid = (begin + end) >> 1;
        merge_sort(nums, tmp, begin, mid);
        merge_sort(nums, tmp, mid + 1, end);
        //[begin][mid], [mid + 1][end]

        //两个数组的下标
        int begin1 = begin, end1 = mid;
        int begin2 = mid + 1, end2 = end;

        //临时数组的下标
        int i = begin;

        //比较大小之后尾插进临时数组
        while(begin1 <= end1 && begin2 <= end2) {
            if(nums[begin1] <= nums[begin2]) {
                tmp[i++] = nums[begin1++];
            }
            else {
                tmp[i++] = nums[begin2++];
                //计算这一段的逆序数对数量//具体推导看文章的文字
                res += mid + 1 - begin1; //整个思路的核心
            }
        }

        //将没有插完的值全部尾插进临时数组
        while(begin1 <= end1) tmp[i++] = nums[begin1++];
        while(begin2 <= end2) tmp[i++] = nums[begin2++];

        //将临时数组拷贝回原数组
        for(int i = begin; i <= end; i++) {
            nums[i] = tmp[i];
        }
    }
};

过啦!!!

 

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果喜欢本文的话,欢迎点赞和评论,写下你的见解。

如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。

之后我还会输出更多高质量内容,欢迎收看

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

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

相关文章

数据库MySQL —— 锁

目录 一、概述 二、全局锁 三、表级锁 1. 表锁 2. 元数据锁 3. 意向锁 四、行级锁 1. 行锁 2. 间隙锁 / 临键锁 一、概述 锁 是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中&#xff0c;除传统的计算资源&#xff08;CPU、RAM、I/O)的争用以外&…

channel 源码解析(5问)

目录 1.channel底层数据结构是什么 2.channel创建的底层实现 3.channel 的发送过程 4.channel的接受过程 5.关闭 channel 1.channel底层数据结构是什么 channel底层的数据结构是hchan,包括一个循环链表和2个双向链表 type hchan struct {qcount uint // tota…

Linux命令·route

Linux系统的route命令用于显示和操作IP路由表&#xff08;show / manipulate the IP routing table&#xff09;。要实现两个不同的子网之间的通信&#xff0c;需要一台连接两个网络的路由器&#xff0c;或者同时位于两个网络的网关来实现。在Linux系统中&#xff0c;设置路由通…

BGP小型实验

实验分析 1.主要考察的是对BGP配置的熟练 2.实验需要在R1与R5分别发布一条路由可以在BGP 中使用network 网段 掩码命令 3.R1与R2,R4与R5是EBGP&#xff0c;而R2,R3,R4是IBGP 实验操作 1.配置接口ip,与环回路由 以R1为例 2.AS内部需要实现非直连的建立是需要保证IBGP内部是通的所…

网络编程之IP协议

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

ChatGPT 存在很大的隐私问题

当 OpenAI 发布时 2020 年 7 月的 GPT-3&#xff0c;它提供了用于训练大型语言模型的数据的一瞥。 根据一篇技术论文&#xff0c;从网络、帖子、书籍等中收集的数百万页被用于创建生成文本系统。 在此数据中收集的是您在网上分享的一些关于您自己的个人信息,这些数据现在让 O…

YGG 代表 Web3 Gaming 参加 2023 年游戏开发者大会

Yield Guild Games&#xff08;YGG&#xff09;在 2023 年 3 月 20 日至 24 日在加州旧金山举行的游戏开发者大会&#xff08;GDC&#xff09;上大显身手&#xff0c;这是游戏开发者的重要交流学习活动。虽然 GDC 本身提供了多种多样的活动&#xff0c;包括讲座、小组讨论、圆桌…

基于html+css的盒子展示6

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

无公网IP?教你在外远程访问本地wamp服务器「内网穿透」

目录 前言 1.Wamp服务器搭建 1.1 Wamp下载和安装 1.2 Wamp网页测试 2. Cpolar内网穿透的安装和注册 2.1 本地网页发布 2.2 Cpolar云端设置 2.3 Cpolar本地设置 3. 公网访问测试 4. 结语 前言 软件技术的发展日新月异&#xff0c;各种能方便我们生活、工作和娱乐的新…

OA系统的功能和作用是什么(OA系统百科)

OA系统的功能和作用是什么&#xff08;OA系统百科&#xff09;。OA系统是一种非常实用的企业内部管理系统&#xff0c;它可以帮助公司实现各项管理工作&#xff0c;可以说是整个公司和团队的纽带&#xff0c;有助于提高工作效率和管理水平。 具体来说&#xff0c;OA系统的作用…

Linux运维进阶之路

前言 首先在我看来&#xff0c;不论你以后是做运维亦或者是做后端开发&#xff0c;云计算等。只要和后端搭边&#xff0c;Linux都是必会的基础知识。所以说Linux是伴随我们工作中一个特别重要的知识。 不过很多同学在初学Linux的时候&#xff0c;始终不得其法&#xff0c;发现…

科技赋能文旅:蓝海创意云携手苏州乐园打造“元宇宙灯会”

4月8日&#xff0c;苏州乐园“欢乐寻梦季”元宇宙灯会即将正式亮灯&#xff0c;这是一场以元宇宙技术为核心&#xff0c;结合现代灯展、数字科技、潮玩游乐等元素&#xff0c;打造的一场大型的沉浸式数字光影体验。 蓝海创意云作为苏州高新区元宇宙龙头企业&#xff0c;以多年…

量化择时——SVM机器学习量化择时(第1部分—因子测算)

文章目录机器学习在量化模型上的应用机器学习量化应用场景量化模型有效性的思考机器学习模型在量化择时中的应用训练与预测流程训练数据特征构造SVM模型与测算SVM训练与预测效果测算效果分析最近ChatGPT比较火&#xff0c;NLP的同学们感触肯定会更深。NLP的应用为人所知并积极部…

【电子学会】2022年12月图形化一级 -- 潜水

潜水 暑假小雨和爸爸去玩了潜水,他见到了各种各样的海洋生物。 1. 准备工作 (1)添加背景“Underwater 2”; (2)删除小猫角色,添加角色“Diver2”、“Fish”、“Jellyfish”、“Shark”; (3)为背景添加声音“Xylo2”。 2. 功能实现 (1)点击绿旗,播放背景音乐…

【chatGPT】chatGPT初步体验,赶快来学习吧

目录 1、什么是ChatGPT 2、我可以相信人工智能告诉我真相吗&#xff1f; 3、你会使用我的对话进行培训吗&#xff1f; 4、ChatGPT 接口参考 认证 请求组织 5、ChatGPT初体验 1、什么是ChatGPT ChatGPT的研究预览是免费使用的。 ChatGPT 是从 GPT-3.5 微调而来的&#x…

vue3+typescript+vant页面开发案例

文章目录效果index.vue页面template内容script内容index.ts页面效果 index.vue页面 template内容 <van-form submit"onSubmit"><van-cell-group inset><van-fieldv-model"providerApply.companyName"name"企业名称"label"企…

snipaste 截图工具——可以使图片悬浮在任何软件上,方便对比

一、下载 官网下载地址&#xff1a;Snipaste Downloads &#xff08;需要梯子&#xff09; CSDN下载地址&#xff1a;https://download.csdn.net/download/weixin_43042683/87671809 1. 下载 压缩包后&#xff0c;免安装&#xff0c;直接解压后既可以使用。 2. 点击Snipaste.…

【c语言】二维数组与指针 存储原理

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

Adaptive Weight Assignment Scheme For Multi-task Learning

Adaptive Weight Assignment Scheme For Multi-task Learning 题目Adaptive Weight Assignment Scheme For Multi-task Learning译题用于多任务学习的自适应权重分配方案时间2022年期刊/会议IAES International Journal of Artificial Intelligence (IJ-AI) 摘要&#xff1a;如…

UDS 14229-1标准加Trace ,两万字长文详细解读

&#x1f345; 我是蚂蚁小兵&#xff0c;专注于车载诊断领域&#xff0c;尤其擅长于对CANoe工具的使用&#x1f345; 寻找组织 &#xff0c;答疑解惑&#xff0c;摸鱼聊天&#xff0c;博客源码&#xff0c;点击加入&#x1f449;【相亲相爱一家人】&#x1f345; 玩转CANoe&…