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

[LeetBook]【学习日记】数组内重组

题目:训练计划 I
训练计划 I

教练使用整数数组 actions
记录一系列核心肌群训练项目编号。为增强训练趣味性,需要将所有奇数编号训练项目调整至偶数编号训练项目之前。请将调整后的训练项目编号以数组形式返回。
示例 1:
输入:actions = [1,2,3,4,5] 输出:[1,3,5,2,4] 解释:为正确答案之一

提示:
0 <= actions.length <= 50000 0 <= actions[i] <= 10000

注意点

  1. 本题答案不唯一,只需满足前部分为奇数,后部分为偶数即可

解答

  • 思路:利用双指针分别找到偶数元素和奇数元素,执行交换即可,指针碰撞时重组完成
vector<int> trainingPlan(vector<int>& actions) {int i=0, j=actions.size()-1;while(i<j){while(i<j && actions[i]%2) ++i;while(i<j && !(actions[j]%2)) --j;swap(actions[i], actions[j]);}return actions;}
  • 代码中的细节:
  1. 为什么 j 从数组尾部开始遍历?因为如果 j 从 0 开始遍历(假设外循环条件是 j 不越界),如果 0 处是奇数,j 无法进入循环,此时 i 跑到 j 的后面去了,会将后面的偶数换到前面的 j 处,违反题目要求
  2. 为什么正确解答中,在外循环已经对 i<j 做检查的情况下,内循环仍然需要对 i<j 做检查?因为当内循环中 i 一直找不到偶数时,i 可能大于 j,此时会发生如第一点提到的: i 跑到 j 的后面去了,会将后面的偶数换到前面的 j 处
http://www.lryc.cn/news/312183.html

相关文章:

  • 【Linux】磁盘情况、挂载,df -h无法看到的卷
  • AIOps实践中常见的挑战:故障根因与可观测性数据的割裂
  • python 远程代码第一次推送
  • C++开发基础之简单的计时器也有适配场景
  • 数电学习笔记——逻辑函数及其描述方法
  • 2024年护眼台灯哪家品牌好?五款优质品牌专业推荐
  • 搜索iconfont或者阿里图标就可以得到免费的图标
  • android实战视频教程,细数Android开发者的艰辛历程
  • nav2_gps_waypoint_follower_demo 不能在ros2 humble中直接使用的解决方法
  • 华为OD机试 - 螺旋数字矩阵
  • Vue响应式内容丢失处理
  • Linux安装Rabbitmq
  • 在nginx 服务器部署vue项目
  • 制作一个简单的HTML个人网页
  • HM2019创建载荷工况
  • Effective C++ 学习笔记 条款14 在资源管理类中小心copying行为
  • c++数据结构算法复习基础-- 3 --线性表-单向链表-笔试面试常见问题
  • 【踩坑专栏】追根溯源,从Linux磁盘爆满排查故障:mycat2与navicat不兼容导致日志暴增
  • DolphinScheduler——奇富科技的调度实践
  • 2024年最全洗地机选购攻略盘点丨希亦、小米、云鲸、海尔洗地机哪款值得入手?
  • HTML笔记3
  • 利用Python副业赚钱,看完这篇你就懂了!
  • FP16(半精度浮点数)、FP32(单精度浮点数)和INT8
  • MySQL数据管理二
  • sqoop-import 详解
  • 第二周opencv
  • python_读取txt文件绘制多条曲线II
  • java排序简单总结和推荐使用套路(数据排序,结构体排序)
  • 掘根宝典之C语言联合和枚举
  • 【debug】element-ui时间控件回显后不可编辑且显示为空