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

news2024/12/27 1:35:51

摘要

剑指 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.coloradmin.cn/o/354144.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#:Krypton控件使用方法详解(第六讲) ——kryptonTextBox

今天介绍的Krypton控件中的kryptonTextBox&#xff0c;下面开始介绍这个控件的属性&#xff1a;首先介绍的是外观属性&#xff1a;Cursor属性&#xff1a;表示鼠标移动过该控件的时候&#xff0c;鼠标显示的形状。属性值如下图所示&#xff1a;Lines属性&#xff1a;表示在显示…

HTML转EXE工具(HTML App Build)最新版

HTML转EXE工具&#xff08;HTM2EXE&#xff09;最初发布于2022-08-17。可以将Web前端转换成Windows32或者64的EXE执行程序。当时由于时间紧&#xff0c;未能进行优化&#xff0c;特别是浏览器采用的是IE内核&#xff0c;所以使用起来会有一些兼容性问题&#xff0c;当时就记录了…

万字长文讲述由ChatGPT反思大语言模型的技术精要

文&#xff5c;张俊林 源&#xff5c;知乎张俊林 导读&#xff1a;ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型&#xff08;LLM&#xff0c;Large Language Model&#xff09;效果能好成这样&#xff1b;惊醒是顿悟到我们对LLM的认知及发展理念&#xff0c…

机器学习笔记

一 1.类型 有监督&#xff1a;分类、回归 无监督&#xff1a;聚类、降维 2.挑战&#xff1a; 过拟合&#xff1a;泛化能力弱 欠拟合&#xff1a;模型过于简单 二、 1.开发流程 数据收集->数据清洗->特征工程->数据建模 2.选择性能指标&#xff1a; 回归问题 均方根…

node-sass@4.14.1 包含风险, 如何升级依赖至 dart-sass

文章目录需求我上网都查到了哪些信息在 github 看到了 node-sass 依赖的最新版本的列表&#xff1a;关于方案2的失败不同版本的 nodejs 和 node-sass依赖的**适配关系**从何得知替代方案——dart-sass如何安装 dart sass&#xff1f;需求 在做一个基于Node、React的前端项目&a…

这才是打开Java面试的正确方式,金三银四互联网大厂Java面试八股来袭

前言 招聘旺季已经到了&#xff0c;不知道大家是否准备好了&#xff0c;面对金三银四的招聘旺季&#xff0c;如果没有精心准备那笔者认为那是对自己不负责任&#xff1b;就我们 Java 程序员来说&#xff0c;多数的公司总体上面试都是以自我介绍项目介绍项目细节/难点提问基础知…

【LeetCode】剑指 Offer(3)

目录 写在前面&#xff1a; 题目&#xff1a;剑指 Offer 09. 用两个栈实现队列 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 写在前面&…

追光进行时:沿着全光运力的新航道,加速驶向算力时代

2021年&#xff0c;工信部印发《新型数据中心发展三年行动计划&#xff08;2021—2023年&#xff09;》&#xff0c;明确指出“用3年时间&#xff0c;形成总体布局持续优化&#xff0c;全国一体化算力网络国家枢纽节点、省内数据中心、边缘数据中心梯次布局”&#xff0c;“算力…

LeetCode230218_148、654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。 递归地在最大值 左边 的 子数组前缀上 构建左子树。 递归地在最大值 右边 的 子数组后缀上 构建右子树。 返回 nums 构建的 最大二叉树…

页面置换算法

页面置换算法 在进程运行过程中&#xff0c;若需要访问的物理块不在内存中&#xff0c;就需要通过一定的方式来将页面载入内存&#xff0c;而此时内存很可能已无空闲空间&#xff0c;因此就需要一定的算法来选择内存中要被置换的页面&#xff0c;这种算法就被称为页面置换算法…

redis容器部署及相关配置文件解释

背景&#xff1a;我们项目上的redis除了几个核心业务的集群部署是用二进制部署的&#xff0c;其他环境基本都是容器部署。所以整理了一下redis容器相关的配置。docker-compose部署的配置version: 3services:redis:image: redis:6.2.5container_name: redisrestart: alwaysports…

springmvc+jsp电影院购票售票选座推荐网站java ssm

本电影购票推荐网站以SSM作为框架&#xff0c;B/S模式以及MySql作为后台运行的数据库。本系统主要包括以下功能模块&#xff1a;个人中心、用户管理、电影信息管理、电影类型管理、影院信息管理、系统管理、订单管理等模块&#xff0c;通过这些模块的实现能够基本满足日常电影购…

mysql 时区设置

方法一&#xff1a;修改 mysql 的配置文件永久设置时区&#xff08;优点&#xff1a;永久保存设置&#xff0c;缺点&#xff1a;需重启MySQL服务&#xff09;找到你MySQL的安装目录&#xff08;如果不记得安装在哪 可以输入show variables like “%char%”; 查看&#xff09;&a…

第四章SpringBoot之Web开发

文章目录SpringBoot Web开发总览要解决的问题SpringMVC自动配置原理Web开发静态资源处理第一种静态资源处理webjar第二种静态资源映射规则自定义静态资源路径首页处理内容协商视图解析器测试转换器和格式化器修改SpringBoot的默认配置原理分析全面接管SpringMVC关于国际化处理配…

Seata架构篇 - AT模式

AT 模式 概述 Seata AT 模式是一种非侵入式的分布式事务解决方案&#xff0c;Seata 在内部做了对数据库操作的代理层&#xff0c;我们使用 Seata AT 模式时&#xff0c;实际上用的是 Seata 自带的数据源代理 DataSourceProxy&#xff0c;Seata 在这层代理中加入了很多逻辑&am…

Koin入门1-快速上手

概念 Koin 是一款轻量级的依赖注入框架&#xff0c;它无代理&#xff0c;无代码生成&#xff0c;无反射 大家可以自行查阅官方英文教程&#xff1a;https://insert-koin.io/docs/quickstart/android-compose Koin 简单的来说可以包含以下四个模块&#xff1a; 名称作用entity实…

2|数据挖掘|聚类分析|无监督聚类PAM算法(中心法划分)|肠型分析

常见的六大聚类算法https://blog.csdn.net/m0_57656758/article/details/127653402?ops_request_misc%257B%2522request%255Fid%2522%253A%2522167669020916782425666238%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id167669020…

C++ STL——map和set的使用

文章目录1. 关联式容器1.1 键值对1.2 树形结构的关联式容器2. set2.1 set的介绍2.2 set的插入2.3 set的删除和查找2.4 lower_bound和upper_bound3. multiset3.1 count4. map4.1 map的介绍4.2 map的插入4.3 map的遍历4.4 map的[ ]5. multimap1. 关联式容器 我们之前学的vector、…

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测

时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测 目录时序预测 | MATLAB实现CNN-SVM卷积支持向量机时间序列预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 CNN-SVM预测模型将深度学习模型作为特征学习器&#xff0c;将SVM 支持向量机 作为训练器进行…

基于分布鲁棒联合机会约束的能源和储备调度(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…