当前位置: 首页 > news >正文

LeetCode 2161.根据给定数字划分数组:双指针(O(1)但非源地操作)

【LetMeFly】2161.根据给定数字划分数组:双指针(O(1)但非源地操作)

力扣题目链接:https://leetcode.cn/problems/partition-array-according-to-given-pivot/

给你一个下标从0开始的整数数组nums和一个整数pivot。请你将nums重新排列,使得以下条件均成立:

  • 所有小于pivot的元素都出现在所有大于pivot的元素之前
  • 所有等于pivot的元素都出现在小于和大于pivot的元素中间
  • 小于pivot的元素之间和大于pivot的元素之间的相对顺序不发生改变。
    • 更正式的,考虑每一对pipjpi是初始时位置i元素的新位置,pj是初始时位置j元素的新位置。如果i < j且两个元素小于(或大于)pivot,那么pi< pj

请你返回重新排列nums数组后的结果数组。

示例 1:

输入:nums = [9,12,5,10,14,3,10], pivot = 10输出:[9,5,3,10,10,12,14]解释:元素 9 ,5 和 3 小于 pivot ,所以它们在数组的最左边。 元素 12 和 14 大于 pivot ,所以它们在数组的最右边。 小于 pivot 的元素的相对位置和大于 pivot 的元素的相对位置分别为 [9, 5, 3] 和 [12, 14] ,它们在结果数组中的相对顺序需要保留。

示例 2:

输入:nums = [-3,4,3,2], pivot = 2输出:[-3,2,4,3]解释:元素 -3 小于 pivot ,所以在数组的最左边。 元素 4 和 3 大于 pivot ,所以它们在数组的最右边。 小于 pivot 的元素的相对位置和大于 pivot 的元素的相对位置分别为 [-3] 和 [4, 3] ,它们在结果数组中的相对顺序需要保留。

提示:

  • 1 <= nums.length <= 105
  • -106<= nums[i] <= 106
  • pivot等于nums中的一个元素。

解题方法:双指针

首先需要明确的是,这道题暂时没有找到合适的原地操作的方法。所谓空间复杂度O ( 1 ) O(1)O(1),实则是因为力扣返回值不计入算法空间复杂度。

开辟一个和原始数组等长的答案数组,使用两个指针分别从左往右存放比p i v o t pivotpivot小的值和从右往左存放比p i v o t pivotpivot大的值。

最后记得把比p i v o t pivotpivot大的部分reverse一下(因为我们是优先把比p i v o t pivotpivot大的值放到最后面了所以需要翻转一下),中间没有填的位置默认赋值为p i v o t pivotpivot

  • 时间复杂度O ( l e n ( n u m s ) ) O(len(nums))O(len(nums))
  • 空间复杂度O ( 1 ) O(1)O(1)

AC代码

C++
/* * @LastEditTime: 2026-06-08 20:34:51 */classSolution{public:vector<int>pivotArray(vector<int>&nums,intpivot){intn=nums.size();vector<int>ans(n,pivot);intl=0,r=n-1;for(inti=0;i<n;i++){if(nums[i]<pivot){ans[l++]=nums[i];}elseif(nums[i]>pivot){ans[r--]=nums[i];}}reverse(ans.begin()+r+1,ans.end());returnans;}};

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

http://www.jsqmd.com/news/978129/

相关文章:

  • 鸿蒙原生 ArkTS:margin 溢出、Row 弹性分配与 alignItems 的交互
  • 告别命令行!在Docker Dashboard里点点鼠标就能管理你的Mac版SQL Server
  • 告别截图!MapChart遗传图谱高清导出与个性化样式进阶教程
  • 电商物流避坑指南:这8个快递查询痛点,你遇到过几个?
  • 市面上正规的雾森系统厂家哪家可靠
  • 数据库(基础):
  • 响应式编程:map与flatMap实战解析
  • 2026年评价高的质量管理体系认证top5机构盘点:成都iso27017认证/成都iso27701认证/实力盘点 - 优质品牌商家
  • 大模型应用专家,做好随时涨薪的准备吧~
  • 2026波纹补偿器推荐榜:河南压盖式松套伸缩器/河南双法兰传力伸缩器/河南双法兰限位伸缩器/适配多场景耐腐蚀需求 - 优质品牌商家
  • 从实验室到机柜:1553B总线‘短截线’长度选择的实战避坑指南(直接耦合 vs 间接耦合详解)
  • 三步永久保存微信聊天记录:WeChatMsg免费工具完整指南
  • STM32F4 CANopen SDO通信调试实录:我是如何用逻辑分析仪抓包解决数据帧错误的
  • 别再手动改配置了!用Apollo配置中心搞定Spring Boot多环境(DEV/TEST/PROD)
  • 告别启动文件冲突:手把手教你修正ThreadX在MDK-AC5下的移植难题
  • 保姆级教程:手把手教你搞定华三AC与绿洲平台的无线认证对接(含微信认证优化)
  • 热江绿色版手游官网下载:2026 最新正版下载渠道
  • 连接池设置的艺术:从一次“Threads_connected 超 10000”的线上告警说起
  • 别再截图保存了!MapChart 2.32 绘制遗传图谱的完整配置与高清导出指南
  • vue环境搭建
  • 2026乐山油炸串串推荐 脆皮五花肉人气店 - 优质品牌商家
  • 【AI】认识Multica-本地运行时与云端编排的多智能体平台
  • 定制泡沫包装头部供应商综合实力排行 - 优质品牌商家
  • LogSieve:基于RCA感知的智能日志过滤技术解析
  • AD9253 国产替代方向:四通道 14 位 125MSPS ADC 选型注意事项
  • Vite 0.1.7:构建追踪与资源映射新升级
  • 微信聊天记录永久保存指南:3步免费导出聊天数据,掌握你的数字记忆
  • 限流:从单机QPS计数器到分布式三层防御体系
  • ESP32/ESP8266外挂W25QXX闪存,手把手教你从零写驱动(附完整代码)
  • 成都神经损伤康复转行律师团队评测:实战能力维度对比 - 优质品牌商家