news 2026/6/9 1:31:14

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 1:30:22

TwitchLink:Twitch 直播下载,一个 GUI 全搞定

文章目录TwitchLink&#xff1a;Twitch 直播下载&#xff0c;一个 GUI 全搞定1、Twitch 内容的下载困境2、下载能力一览3、文件管理和界面4、运行要求5、什么人用得上TwitchLink&#xff1a;Twitch 直播下载&#xff0c;一个 GUI 全搞定 devhotteok/TwitchLink 在 GitHub 上拿…

作者头像 李华
网站建设 2026/6/9 1:29:00

告别盲目调用:手把手教你用Python CLR分析并安全调用未知C# DLL

逆向工程实战&#xff1a;Python安全调用未知C# DLL的深度指南 当你面对一个没有源码、文档缺失的C# DLL文件时&#xff0c;如何安全地探索并调用其中的功能&#xff1f;这不仅是技术问题&#xff0c;更是一场逆向思维与工程实践的完美结合。本文将带你深入CLR内部机制&#xf…

作者头像 李华
网站建设 2026/6/9 1:28:59

别再死记硬背了!用STM32CubeMX+FreeModbus库,5分钟搞定Modbus RTU从机配置

STM32CubeMXFreeModbus实战&#xff1a;5步打造工业级Modbus RTU从站在工业自动化领域&#xff0c;Modbus RTU协议因其简单可靠的特点&#xff0c;至今仍占据着重要地位。但对于嵌入式开发者而言&#xff0c;手动实现Modbus协议栈往往意味着繁琐的寄存器配置和冗长的调试过程。…

作者头像 李华
网站建设 2026/6/9 1:28:43

Vibe Coding 入门先搞懂哪些技术名词?从服务器到 RAG 的高频概念整理

本文整理自 B站《给vibecoder的技术名词入门词典丨122个高频词翻成大白话》&#xff0c;通过音视频转录总结工具&#xff08;Ai好记&#xff09;转录整理&#xff0c;以下为精炼整理后的内容。很多人开始接触 Vibe Coding 时&#xff0c;第一反应都是让 AI 直接写代码。但真正卡…

作者头像 李华
网站建设 2026/6/9 1:26:00

用CubeMX+Keil5复刻第八届蓝桥杯电梯赛题,聊聊我踩过的那些坑

蓝桥杯嵌入式竞赛避坑指南&#xff1a;从CubeMX配置到电梯调度算法的实战复盘第一次打开CubeMX面对第八届蓝桥杯电梯赛题时&#xff0c;我的大脑就像被按下了复位键——四层电梯的调度逻辑、按键响应处理、RTC时间显示&#xff0c;这些需求在原理图上交织成一张复杂的网。作为经…

作者头像 李华