链接题解1.先用partition函数求解第n/21元素求得下标n/2的位置的排序2.第一个元素填写结果集合pivlot写然后选取首尾指针奇数选择1和length-1偶数选择为1和length-2)3.重新更新l 2 r - 2 填充 结果集合或者partition替换为nth_element(nums.begin(), nums.begin()k/2, nums.end());nums.begin()k/2,已经是求解下标位置class Solution { public: void wiggleSort(vectorint nums) { const int n nums.size(); if (n 1) return; // 1. 拷贝一份用快速选择找中位数 vectorint tem nums; // 如果是奇数 5 , 4, 3, 2, 1 // 求解mid是为5/2 1 第3小的数字是3 // 如果是偶数求解4, 3, 2, 1 // 求解mid是4/21 第3小的数字是2 partition(tem, 0, n - 1, n / 2 1); int mid tem[n / 2]; // 2. 构造答案数组初始全部填中位数 vectorint ans(n, mid); // 3. l 指向第一个奇数位放大值r 指向最后一个偶数位放小值 int l 1; int r (n % 2 0) ? n - 2 : n - 1; // 如果是奇数的化r n-1 // 如果是偶数的化r n-2 4 3 2 1,把2排除 2 4 1 3 for (int i 0; i n; i) { if (nums[i] mid) { ans[r] nums[i]; r - 2; } else if (nums[i] mid) { ans[l] nums[i]; l 2; } // 等于 mid 的不动保持初始的 mid } nums std::move(ans); } private: // 大的在左边从大到小 void partition(vectorint nums, int start, int end, int k) { if (start end) { return; } int pivot nums[start (end - start) / 2]; int left start; int right end; while (left right) { while (left right nums[left] pivot) { left; } while (left right nums[right] pivot) { --right; } if (left right) { swap(nums[left], nums[right]); left; --right; } } if (start k - 1 right) { return partition(nums, start, right, k); } if (start k - 1 left) { return partition(nums, left, end, k - (left - start)); } } };class Solution { public: void wiggleSort(vectorint nums) { const int n nums.size(); if (n 1) return; // 1. 拷贝一份用快速选择找中位数 vectorint tem nums; //int mid partition(tem, 0, n - 1, n / 2); auto mid_it nums.begin() n / 2; nth_element(nums.begin(), mid_it, nums.end()); int mid *mid_it; // 2. 构造答案数组初始全部填中位数 vectorint ans(n, mid); // 3. l 指向第一个奇数位放大值r 指向最后一个偶数位放小值 int l 1; int r (n % 2 0) ? n - 2 : n - 1; for (int i 0; i n; i) { if (nums[i] mid) { ans[r] nums[i]; r - 2; } else if (nums[i] mid) { ans[l] nums[i]; l 2; } // 等于 mid 的不动保持初始的 mid } nums std::move(ans); } };1.先用partition函数求得n/2的位置的排序2.然后选取首尾指针奇数选择1和length-1偶数选择为1和length-2进行swap交换3.每次首指针每次2尾指针每次-2九章算法 - 帮助更多程序员找到好工作硅谷顶尖IT企业工程师实时在线授课为你传授面试技巧这段代码没有通过class Solution { public: /** * param nums: A list of integers * return: nothing */ void wiggleSort(vectorint nums) { // write your code here if (nums.size() 1) { return; } int len nums.size(); kthLargestElement(len/2, nums); if (len % 2 0) { int left 1; int right nums.size()-2; while (left right) { swap(nums[left], nums[right]); left 2; right - 2; } } else { int left 1; int right nums.size() - 1; while (left right) { swap(nums[left], nums[right]); left 2; right - 2; } } } private: int kthLargestElement(int k, vectorint nums) { cout k k endl; // write your code here if (nums.size() 0) { return 0; } int left 0; int right nums.size()-1; int mid partition(nums, left, right); //cout mid mid endl; while (mid ! k-1) { //cout mid mid endl; if (mid k) { right mid; } else { left mid; } mid partition(nums, left, right); } return nums[mid]; } int partition(std::vectorint nums, int left, int right) { int index random() % (right-left1); swap(nums[right], nums[leftindex]); int nSmall left - 1; for (; left right; left) { if (nums[left] nums[right]) { nSmall; swap(nums[left], nums[nSmall]); } } nSmall; swap(nums[right], nums[nSmall]); cout nSmall val nums[nSmall] endl; return nSmall; } };class Solution { public: // O(n)时间复杂度O(1)空间 void wiggleSort(vectorint nums) { if (nums.size() 0) { return; } /*for (auto num : nums) { cout num ; } cout endl;*/ int len nums.size(); // 求得第几大的位置 // 0 1 2 3/2 1假设3个数字就是求得第2大的数字位置 // 0, 1, 2, 3 4/2 2假设4个个数字就是求得第3大的数字位置 partition(nums, 0, len-1, len/21); /*for (auto num : nums) { cout num yyy ; }*/ int left 0; int right len-1; // 如果是奇数的情况把右边的数字排出下 if (len % 2) { --right; } // 原地交换 while (left right) { // 交换 swap(nums[left], nums[right]); // 空出一个位置不需要交换 left 2; right - 2; } /*for (auto num : nums) { cout num ; } cout endl; std::vectorint result; result.reserve(len); int left 0; int right len-1; while (left right) { if (left right) { result.push_back(nums[left]); } else { result.push_back(nums[left]); result.push_back(nums[right]); } left; --right; } nums std::move(result);*/ } private: int partition(std::vectorint nums, int start, int end, int k) { if (start end) { return start; } int val nums[start(end-start)/2]; int l start; int r end; //cout l val r endl; while (l r) { while (l r nums[l] val) { //cout nums endl; l; } while (l r nums[r] val) { //cout nums endl; --r; } if (l r) { swap(nums[l], nums[r]); //cout left : l nums[l] right: r nums[r] endl; l; --r; } } if (start k - 1 r) { return partition(nums, start, r, k); } if (start k - 1 l) { return partition(nums, l, end, k - (l - start)); } return r 1; } };. - 力扣LeetCode
企业数字化 ERP 产品动态
相关推荐
NIO源码初探 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 18:16:55
【Nginx】nginx.conf文件结构与基础配置指令(上) /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 18:16:55
xray与fofa联动(附脚本) /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 18:15:55
免费短链接API评测与Dub.co对接实战 1. 短链接服务与API对接的价值解析 短链接服务早已从单纯的URL缩短工具,演变为现代数字营销和数据分析的基础设施。通过将冗长的原始网址压缩成简洁的短链,不仅解决了字符限制的困扰(比如Twitter早期的140字限制),更重… · 2026/11/3 19:40:27
医疗AI战略计划七段式骨架:从价值链到可撤回性的治理机制 简介:这份PDF是美国卫生与公众服务部(HHS)于2025年1月发布的《医疗卫生人工智能战略计划》原文,面向医疗AI研究者、政策制定者、医疗信息化从业者及公共卫生管理者,系统回答AI如何在医疗研究、产品研发与公共卫生服务中… · 2026/11/3 19:40:27
MySQL安装与配置全指南:从入门到实战 1. MySQL安装全流程解析MySQL作为最流行的开源关系型数据库之一,几乎成为开发者必备技能。但新手在安装过程中经常会遇到各种"拦路虎",今天我就结合多年运维经验,手把手带你完成MySQL安装,并解决那些教科书上不会写的典… · 2026/11/3 19:40:27
电商数据驱动的月季销售预测系统设计与实践 1. 项目背景与核心价值月季作为园艺市场的重要品类,其销售波动受季节、气候、营销活动等多重因素影响。传统花农和电商卖家往往凭经验备货,常面临库存积压或供不应求的困境。这个项目通过爬取淘宝月季销售数据,构建预测模型并实现可视化&… · 2026/11/3 19:40:27
InfluxDB时间序列数据库核心原理与生产实践 1. InfluxDB数据库全景解析 作为时间序列数据库领域的标杆产品,InfluxDB在物联网监控、DevOps监控、实时分析等场景中展现出独特优势。我曾在某工业物联网平台项目中深度使用InfluxDB处理每秒百万级的数据点写入,其高性能特性令人印象深刻。与传统关系型… · 2026/11/3 19:40:27
从WPE封包修改看服务端校验:协议分析与安全设计 简介:这份资源是面向游戏封包修改初学者与进阶爱好者的 WPE 系统教程,围绕封包截取、S 包定位、滤镜制作与独立外挂制作等主题展开,帮助读者从零理解 WPE 的工作原理与基本操作流程。压缩包内共 1 个 doc 文档,约 5.49MBÿ… · 2026/11/3 19:39:27
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46
STM32F411RE与MAX14431实现SPI隔离:工业现场抗共模干扰实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
ESP32+大模型AI硬件开发:从Demo到产品的8个工程问题 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
基于MAX14431BAEE+与PIC18F85J10的SPI隔离方案设计与实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 1:01:59
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46