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

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

摘要

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

一、双指针解析

考虑定义双指针 i , j分列数组左右两端,循环执行:

  • 指针 i从左向右寻找偶数;
  • 指针 j从右向左寻找奇数;
  • 将偶数nums[i]和奇数 nums[j]交换。

可始终保证:指针 i左边都是奇数,指针j右边都是偶数 。

算法流程:

  • 初始化:i, j双指针,分别指向数组 nums左右两端;
  • 循环交换: 当 i=j时跳出;
  •         指针i遇到奇数则执行 i=i+1跳过,直到找到偶数;
  •         指针j遇到偶数则执行 j=j−1跳过,直到找到奇数;
  •          交换 nums[i]和 nums[j]值;
  • 返回值:返回已修改的 nums数组
class Solution {public int[] exchange(int[] nums) {int left = 0, right = nums.length - 1;while (left < right) {while (left < right && nums[left] % 2 == 1) {left++;}while (left < right && nums[right] % 2 == 0) {right--;}if (left < right) {int temp = nums[left];nums[left] = nums[right];nums[right] = temp;left++;right--;}}return nums;}
}

复杂度分析:

  • 时间复杂度 O(N): N为数组 nums长度,双指针 i, j共同遍历整个数组。
  • 空间复杂度 O(1) : 双指针i, j使用常数大小的额外空间。

博文参考

《leetcode》

http://www.lryc.cn/news/11233.html

相关文章:

  • 实用版ChatBing论文阅读助手教程+新测评
  • Linux生产者消费模型
  • 动态网站开发讲课笔记01:网页开发基础
  • 互联网新时代要到来了(三)什么是ChatGPT?
  • 华为OD机试 - 环中最长子串(Python)
  • 安全—08day
  • 【看表情包学Linux】进程地址空间 | 区域和页表 | 虚拟地址空间 | 初识写时拷贝
  • 响应式编程(Reactive Programming)介绍
  • 你不知道的美化列表的两种方案-<ul/><ol/>
  • 2023年浙江理工大学MBA招生考试初试成绩查询及复查的通知
  • SVNH数据(.mat格式)转为图像(.png)matlab代码
  • 【总结】vim教程与详细命令总结,该来的躲不掉啊晕
  • git基础使用
  • 基于 RANSAC 的地面分割与聚类算法
  • JVM内存模型深度剖析与优化
  • 软件性能测试定义中文
  • 2023情人节正经性生活调研报告
  • 22- 隐马尔科夫HMM (NLP自然语言算法) (算法)
  • gRPC是什么,怎么用
  • linux基本功系列之fdisk命令实战
  • Mysql UDF提权复现Raven2
  • 枚举类(enum)
  • 腾讯云架构师亲码“redis深度笔记”,从入门到精通,面面俱到
  • 萌新应该如何开始学习走向自动化测试高薪岗位?
  • -bash: pip: command not found
  • 使用HTTP隧道代理,请求超过频率要怎么办?
  • paddle 49 ODConv的可部署调整
  • C++ STL 学习之【string】
  • 使用开源 MaxKey 与 APISIX 网关保护你的 API
  • Linux之Xshell工具使用