news 2026/4/26 8:06:09

【剑斩OFFER】算法的暴力美学——计算右侧小于当前元素的个数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【剑斩OFFER】算法的暴力美学——计算右侧小于当前元素的个数

一、题目原理

二、算法原理

使用归并排序算法(降序)+ 绑定数组下标 来解决这道题:

当 nums[ begin1 ] > nums[ begin2 ] 时,end2 - begin2 + 1个数字小于nums[ begin1 ];例如 :7 > 4 ,那么 4 到 1 之间的数字都小于7;

因为在合并两个数组的时候会打乱各个数字的下标,根据题目要求我们是要在原数组的下标来判断每个数字的右边有多少个数字是小于当前数字的,所以我们要弄出两个数组来绑定下标:index1 和 index2 ,其中 index1 是保存原来数组的下标,而 index2 是保存合并数组后各个数字对应原来数组的下标,保证各个数字对应的下标不会乱,到时候再把 index2 里面的数字跟新到 index1 里面:

三、代码实现

class Solution { vector<int> tmp; vector<int> index1; vector<int> index2; vector<int> ret; public: vector<int> countSmaller(vector<int>& nums) { tmp.resize(nums.size()); index1.resize(nums.size()); ret.resize(nums.size()); index2.resize(nums.size()); for(int i = 0; i < nums.size();i++) index1[i] = i; Quicksort(0,nums.size()-1,nums,tmp); return ret; } void Quicksort(int l,int r,vector<int>& nums,vector<int>& tmp) { if(l >= r) return; int keyi = (r + l) >> 1; Quicksort(l,keyi,nums,tmp);//左边:【 l , keyi 】 Quicksort(keyi + 1,r,nums,tmp);//右边:【keyi + 1,r 】 int begin1 = l,end1 = keyi;//左边数组 int begin2 = keyi + 1,end2 = r;//右边数组 int index = l;//遍历起始点 while(begin1 <= end1 && begin2 <= end2)//比较遍历 { if(nums[begin1] > nums[begin2]) { ret[index1[begin1]] += end2 - begin2 + 1; index2[index] = index1[begin1];//绑定下标 tmp[index++] = nums[begin1++]; } else { index2[index] = index1[begin2]; tmp[index++] = nums[begin2++]; } } while(begin1 <= end1) { index2[index] = index1[begin1]; tmp[index++] = nums[begin1++];//把左边剩余的数字放到 tmp } while(begin2 <= end2) { index2[index] = index1[begin2]; tmp[index++] = nums[begin2++];//把右边剩余的数字放到 tmp } for(int i = l;i <= r;i++) { index1[i] = index2[i]; nums[i] = tmp[i];//把 tmp 里面的数字放回到原数组 nums } } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 7:05:01

Unity学习笔记(二十)PlayerPrefs(一)

目录 PlayerPrefs是什么 存储原理 读取相关 删除数据 PlayerPrefs数据唯一性 PlayerPrefs是什么 是Unity提供的可以用于存储读取玩家数据的公共类 存储原理 PlayerPrefs的数据存储&#xff0c;类似键值对存储&#xff0c;一个键对应一个值 提供了存储3种数据的方法 &am…

作者头像 李华
网站建设 2026/4/18 0:03:23

书籍-严羽《沧浪诗话》

严羽《沧浪诗话》详细介绍 书籍基本信息 书名&#xff1a;沧浪诗话 作者&#xff1a;严羽&#xff08;南宋&#xff09; 成书时间&#xff1a;南宋理宗时期&#xff08;约公元1230-1250年&#xff09; 卷数&#xff1a;1卷&#xff08;分五章&#xff09; 类别&#xff1a;诗歌…

作者头像 李华
网站建设 2026/4/24 19:08:50

2025年有哪些好用的PDF编辑器推荐?今天带来5款深度测评

数字化办公的深化让PDF编辑器从“可选工具”变为“核心装备”&#xff0c;但用户选购时常常陷入“功能看似全却不好用”“符合场景却不安全”的矛盾——企业需要兼顾协作与数据安全&#xff0c;个人追求高效与低成本&#xff0c;政府则聚焦合规与国产化。基于2025年最新市场需求…

作者头像 李华
网站建设 2026/4/23 20:52:53

构筑测试事业的北极星——软件测试愿景制定指南

为什么测试团队需要明确的愿景&#xff1f; 在瞬息万变的软件开发领域中&#xff0c;软件测试作为质量保障的核心环节&#xff0c;常常陷入被动响应的工作模式——追逐不断变更的需求&#xff0c;应对持续迭代的产品&#xff0c;处理突发的线上问题。这种被动姿态不仅使测试人…

作者头像 李华
网站建设 2026/4/18 21:12:05

如何在没有经费的情况下做科研

实验的家伙事 在做这个工作之前&#xff0c;笔者的主业是合成生物学与分子生物学&#xff0c;见我之前的博文《质粒拷贝数以及启动子活性的定量测量》。在研究过程中有一些发现&#xff0c;也积累了几个点子和想法。然而这些想法无一实现&#xff0c;主要问题是没有钱和资源来…

作者头像 李华