news 2026/7/21 15:10:50

【剑斩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/7/19 1:39:45

无代码解决方案:破解企业数字化转型效率困局

在数字化转型进入深水区的当下&#xff0c;企业对高效、灵活的数字化工具需求愈发迫切。传统软件开发模式的高成本、长周期、强技术依赖等痛点&#xff0c;成为制约企业尤其是中小企业数字化进程的关键瓶颈。无代码解决方案凭借可视化拖拽、模块化组装等核心特性&#xff0c;将…

作者头像 李华
网站建设 2026/7/21 16:10:28

SAM (Segment Anything Model):万物皆可分割-k学长深度学习专栏

本文来源&#xff1a;k学长的深度学习宝库&#xff0c;点击查看源码&详细教程。深度学习&#xff0c;从入门到进阶&#xff0c;你想要的&#xff0c;都在这里。包含学习专栏、视频课程、论文源码、实战项目、云盘资源等。 1、研究背景与动机 &#xff08;1&#xff09;分割…

作者头像 李华
网站建设 2026/7/20 5:19:16

Mysql 报错 “Public Key Retrieval is not allowed”

报错 “Public Key Retrieval is not allowed” 出现的原因和之前分析的一样&#xff1a;MySQL 用户使用了 caching_sha2_password 认证&#xff0c;而 DBeaver 默认不允许自动获取公钥。 解决方法&#xff1a;方法 A&#xff1a;在 DBeaver 中修改连接属性点击 编辑驱动设置 →…

作者头像 李华
网站建设 2026/7/21 20:06:43

熊市中最适用的公式==底部建仓

{}入货点:IF(REF(底部区域,1)>0 AND REF(C,1)<REF(O,1) AND 底部区域>0 AND C>O,1,0); DRAWICON(入货点1,底部区域*1.2,1);

作者头像 李华
网站建设 2026/7/20 19:52:33

100G双光口网卡技术解析:Intel E810-CAM2方案的性能与应用突破

在数据中心规模化部署、高性能计算&#xff08;HPC&#xff09;普及以及虚拟化技术深度应用的当下&#xff0c;网络I/O性能已成为制约系统整体效率的关键瓶颈。100G以太网适配器凭借高带宽、低延迟的核心优势&#xff0c;逐渐成为高端服务器、存储设备及防火墙的标配。本文将聚…

作者头像 李华