news 2026/6/15 16:25:36

【剑斩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/6/15 11:23:04

15、Samba的用户认证与密码管理

Samba的用户认证与密码管理 1. Samba的用户认证安全级别 Samba支持四种网络安全级别,用于处理用户认证:共享级、用户级、服务器级和域级。这些安全策略可以通过全局安全选项来实现。 安全选项 参数 功能 默认值 范围 security domain, server, share, or user 指示…

作者头像 李华
网站建设 2026/6/15 12:32:56

16、Samba在Windows环境中的配置与应用

Samba在Windows环境中的配置与应用 1. Windows域登录概述 在传统的Windows 95/98工作组环境中,系统在用户登录时会直接接受输入的用户名和密码,不存在未经授权的用户。当新用户登录时,操作系统会要求设置新密码,并以此进行后续的身份验证,只有在连接其他共享资源时才会使…

作者头像 李华
网站建设 2026/6/15 1:18:27

企业ODI备案材料清单大全,商务部发改及外汇申请材料

无论是新设境外公司还是并购海外资产&#xff0c;企业出海投资&#xff0c;ODI备案是合规出境的“通行证”&#xff01; 一、ODI备案三大审批部门及材料清单 ODI备案需依次通过发改委、商务部、外汇管理局的审核&#xff0c;材料清单因投资方式&#xff08;新设/并购&#xff0…

作者头像 李华
网站建设 2026/6/15 12:31:05

并购项目ODI备案特殊材料:尽调报告及估值报告的核心作用

一、尽调报告&#xff1a;ODI备案的“风险扫描仪”尽调报告是并购项目的核心支撑材料&#xff0c;需由专业机构出具&#xff0c;全面揭示目标公司的法律、财务、业务及市场风险。1. 核心内容与监管重点法律尽职调查&#xff08;Legal DD&#xff09;&#xff1a;审查目标公司注…

作者头像 李华
网站建设 2026/6/15 3:35:20

机械臂工作空间仿真分析-基于蒙特卡洛法的七自由度机械臂

机械臂工作空间仿真分析-6 蒙特卡洛法&#xff0c;七自由度机械臂。蒙特卡洛法玩机械臂就像在工地撒豆子——撒得越多&#xff0c;轮廓越清晰。今天咱们拿七轴机械臂开刀&#xff0c;用Python折腾个工作空间三维点云图。别被自由度吓到&#xff0c;这玩意儿的关键在于敢让随机数…

作者头像 李华
网站建设 2026/6/15 12:29:46

Matlab学习笔记04

书籍&#xff1a;Matlab实用教程 工具&#xff1a;Matlab2021a 电脑信息&#xff1a;Intel Xeon CPU E5-2603 v3 1.60GHz 系统类型&#xff1a;64位操作系统&#xff0c;基于X64的处理器 windows10 专业版 第2章 MATLAB数值计算 2.2.5 多维数组 a(:,:,2)[1 2;3 4] a ans(:,:,1…

作者头像 李华