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

LeetCode 922.按奇偶排序数组2

给定一个非负整数数组 nums, nums 中一半整数是 奇数 ,一半整数是 偶数 。

对数组进行排序,以便当 nums[i] 为奇数时,i 也是 奇数 ;当 nums[i] 为偶数时, i 也是 偶数 。

你可以返回 任何满足上述条件的数组作为答案 。

示例 1:

输入:nums = [4,2,5,7]
输出:[4,5,2,7]
解释:[4,7,2,5],[2,5,4,7],[2,7,4,5] 也会被接受。
示例 2:

输入:nums = [2,3]
输出:[2,3]

提示:

2 <= nums.length <= 2 * 104^44
nums.length 是偶数
nums 中一半是偶数
0 <= nums[i] <= 1000

进阶:可以不使用额外空间解决问题吗?

同向双指针,左指针l左边[0, l)是已经排好序的部分,如果右指针指向的值和左指针l的奇偶性相同,就交换左右指针指向的值,然后递增左指针l;否则右移右指针,直到找到和l奇偶性相同的值:

class Solution {
public:vector<int> sortArrayByParityII(vector<int>& nums) {int l = 0;int r = 0;int n = nums.size();while (r < n) {if ((nums[r] & 1) != (l & 1)) {++r;} else {swap(nums[l], nums[r]);++l;// 此处修改r的代码可以去掉,因为l最多比r多1// 这发生在l和r指向同一个值的位置,且该值与l的奇偶性相同时// 这一情况下,l会移动到下一位置,l的奇偶性就会改变// 即l与r指向的值的奇偶性就会不同,然后下次循环就会右移r// 效果与此处的赋值相同r = max(l, r);}}return nums;}
};

如果nums的长度为n,则此算法时间复杂度为O(n),空间复杂度为O(1)。

http://www.xdnf.cn/news/17781.html

相关文章:

  • ElasticSearch不同环境同步索引数据
  • Spring Ai 如何配置以及如何搭建
  • Jmeter自定义脚本
  • 零基础学会制作 基于STM32单片机智能加湿系统/加湿监测/蓝牙系统/监测水量
  • 探索无人机图传技术:创新视野与无限可能
  • 在 macOS 上顺利安装 lapsolver
  • OpenCV Python——VSCode编写第一个OpenCV-Python程序 ,图像读取及翻转cv2.flip(上下、左右、上下左右一起翻转)
  • 死锁总结及解决方案
  • 关于截屏时实现游戏暂停以及本地和上线不同步问题
  • 用GPT解释“GPT-5”是什么,有什么优势
  • python-pycharm切换python各种版本的环境与安装python各种版本的环境(pypi轮子下载)
  • Flink Stream API 源码走读 - map 和 flatMap
  • KNN(k近邻算法)
  • Chrome插件开发实战:从架构到发布全流程
  • 准备用Qt6 重写音视频会议系统服务端
  • 开源 Arkts 鸿蒙应用 开发(十五)自定义绘图控件--仪表盘
  • 开源 Arkts 鸿蒙应用 开发(十六)自定义绘图控件--波形图
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • 前端css学习笔记6:盒子模型
  • 国内著名AI搜索优化专家孟庆涛发表《AI搜索内容可信度评估综合指南》
  • liteflow
  • Vue3中的ref与reactive全面解析:如何正确选择响应式声明方式
  • Java List 集合详解(ArrayList、LinkedList、Vector)
  • 水印消失术!JavaAI深度学习去水印技术深度剖析
  • 传输层协议TCP(3)
  • Flink Stream API 源码走读 - socketTextStream
  • 集成电路学习:什么是Machine Learning机器学习
  • 从单机到分布式:用飞算JavaAI构建可扩展的TCP多人聊天系统
  • 【力扣56】合并区间
  • easyexcel模板导出Map数据时空值列被下一行列非空数据覆盖