牛客JZ21-调整数组顺序使奇数位于偶数前面

目录

  • 问题描述
  • 示例
  • 具体思路
    • 思路一
  • 代码实现

问题描述

输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
数据范围:0≤n≤5000,数组中每个数的值:0≤val≤10000
要求:时间复杂度: O ( n ) O(n) On,空间复杂度: O ( n ) O(n) On
进阶:时间复杂度: O ( n 2 ) O(n^2) On2,空间复杂度: O ( 1 ) O(1) O1

题目链接: https://www.nowcoder.com/practice/ef1f53ef31ca408cada5093c8780f44b?tpId=13&tqId=1374930&ru=%2Fpractice%2F0c1b486d987b4269b398fee374584fc8&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=

示例

示例1
输入:[1,2,3,4]
返回值:[1,3,2,4]

示例2
输入:[2,4,6,5,7]
返回值:[5,7,2,4,6]

示例3
输入:[1,3,5,6,7]
返回值:[1,3,5,7,6]

具体思路

  首先可以考虑相对位置可以变化的情况
题目链接: 牛客JZ81:https://www.nowcoder.com/practice/0c1b486d987b4269b398fee374584fc8?tpId=13&tqId=2221866&ru=%2Fpractice%2Fef1f53ef31ca408cada5093c8780f44b&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&sourceUrl=

  可以通过左右下标的方法,left下标找到偶数,right下标找到奇数,然后进行交换,left是奇数就++left,right是偶数就–right,一次类推完成所有数据的交换,但是这种方式是无法保证奇数和奇数,还有偶数和偶数的相对位置不变的。
在这里插入图片描述

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArrayTwo(vector<int>& array) {
        // write code here
        int left =0;
        int right=array.size()-1;

        while(left<right)
        {
            while(left<right&&(array[left]&1))  //左指针找偶数
            {
                left++;
            }

            while(left<right&&!(array[right]&1))  //右指针找奇数
            {
                right--;
            }

            if(left<right)    //进行奇数和偶数的交换
            {
                int tmp=array[left];
                array[left]=array[right];
                array[right]=tmp;
            }
        }
        return array;    //返回整个数组
    }
};

思路一

  首先遍历整个数组,查找数组中的奇数,找到后将它临时保存起来,然后将该奇数位置之前的所有偶数都向后移动一位,最后将该奇数放到移动后的空闲位置处,依次类推,就可以完成不改变顺序的奇数在前偶数在后的数组排序。

在这里插入图片描述

代码实现

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param array int整型vector 
     * @return int整型vector
     */
    vector<int> reOrderArray(vector<int>& array) {
        // write code here
        if(array.empty())
        {
            return {};
        }

        int k=0;
        for(int i=0;i<array.size();i++)
        {
            if((array[i]&1)==1)  //判断是否为奇数
            {
                int tmp=array[i];   //保存奇数的值
                int j=i;
                while(j>k)
                 {
                     array[j]=array[j-1];   //将k后面的偶数各向后移动一位
                     j--;
                 }
                array[k++]=tmp;   //将奇数放入移动后空闲的位置
            } 
        }
        return array;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/500066.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

12.Java语言的发展

JAVA语言的诞生是具有一定戏剧性的&#xff0c;可以说是命运多舛&#xff0c;差点凉凉&#xff0c;差点GG&#xff0c;差点嗝屁。 在1990年的时候Sun&#xff08;Stanford University Network&#xff1a;斯坦福大学网络&#xff09;公司成立了一个由 James Gosling 领导的Gree…

【unity】unity安装及路线图

学习路线图 二、有关unity的下载 由于unity公司是在国外&#xff0c;所以.com版&#xff08;https://developer.unity.cn/&#xff09;不一定稳定&#xff0c;学习时推荐从.cn国内版&#xff08;https://developer.unity.cn/&#xff09;前往下载&#xff0c;但是后期仍需回…

通过dockerfile制作代码编译maven3.8.8+jdk17 基础镜像

一、背景&#xff1a; paas平台维护过程中有一个流水线的工作需要支持运维&#xff0c;最近有研发提出新的需求要制作一个代码编译的基础镜像出来&#xff0c;代码编译的基础镜像需求如下&#xff1a; maven版本&#xff1a;3.8.8版本 jdk版本&#xff1a;17版本&#xff0c;小…

C++中的STL简介与string类

目录 STL简介 STL的版本 STL的六大组件 string类 标准库中的string类 string类的常用接口 string类对象对容量的操作 size()函数与length()函数 capacity()函数 capacity的扩容方式 reserve()函数 resize()函数 string类对象的操作 push_back()函数 append()函数 operator()函数…

Redis与数据库的一致性

Redis与数据库的数据一致性 在使用Redis作为应用缓存来提高数据的读性能时&#xff0c;经常会遇到Redis与数据库的数据一致性问题。简单来说&#xff0c;就是同一份数据同时存在于Redis和数据库&#xff0c;如何在数据更新的时候&#xff0c;保证两边数据的一致性。首先&#…

用Blender给MetaHuman不同胖瘦身体模型做插值,计算过度模型

用Blender给MetaHuman不同胖瘦身体模型做插值&#xff0c;计算过度模型 本篇文章所有想法和代码均为ChatGPT所写 需求&#xff1a;MetaHuman的身体有瘦、标准、胖三个体型&#xff0c;想要通过三个体型插值计算出符合用户体型的更多模型 建议&#xff1a;chatGPT建议用Blender&…

Mysql数据库:主从复制与读写分离

目录 前言 一、Mysql主从复制概述 1、Mysql主从复制概念 2、Mysql主从复制功能和使用场景 2.1 功能&#xff08;为何使用主从复制&#xff09; 2.2 适用场景&#xff08;何时使用主从复制&#xff09; 3、Mysql复制的类型 3.1 基于SQL语句的复制&#xff08;Statement默…

【原生小程序-增加友盟统计】

1.project.config.json中 //最外面的 {"packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./"}] }2.在终端中输入npm init -y 3.再输入命令np…

整理git上的模板框架

vite-vue3.0-ts-pinia-uni-app 技术栈的app框架 功能&#xff1a;基于 uni-app&#xff0c;一端发布多端通用&#xff0c;目前已经适配 H5、微信小程序、QQ小程序、Ios App、Android App。 taro3vue3tsnutuipinia taro3 框架小程序跨端平台 vue3.0-element-vite-qiankun 后台…

HarmonyOS实战开发-如何构建多种样式弹窗

介绍 本篇Codelab将介绍如何使用弹窗功能&#xff0c;实现四种类型弹窗。分别是&#xff1a;警告弹窗、自定义弹窗、日期滑动选择器弹窗、文本滑动选择器弹窗。需要完成以下功能&#xff1a; 点击左上角返回按钮展示警告弹窗。点击出生日期展示日期滑动选择器弹窗。点击性别展…

【动态规划】Leetcode 62. 不同路径I 63. 不同路径II

【动态规划】Leetcode 62. 不同路径I 63. 不同路径II Leetcode 62. 不同路径ILeetcode 63. 不同路径II ---------------&#x1f388;&#x1f388;62. 不同路径I 题目链接&#x1f388;&#x1f388;------------------- ---------------&#x1f388;&#x1f388;63. 不同路…

【YOLOv5改进系列(7)】高效涨点----使用yolov8中的C2F模块替换yolov5中的C3模块

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ C3模块和C2F模块详解1.1 &#x1f393; C3模块1.2 ✨BottleNeck模块1.3 ⭐️C2F模块 二、2️⃣添加C2f和C2F_Bottleneck模块代码三、3️⃣新建yolov5s_C2F.yaml文件四、4️⃣修改yolo.py中的parse_model函数五…

Collction的三种遍历

目录 集合体系结构 迭代器遍历&#xff1a; 增强for遍历&#xff1a; Lambda表达式遍历 集合体系结构 List 系列集合 &#xff1a; 添加元素是有序的、可重复的&#xff0c;有索引的&#xff1b; 有序的&#xff1a;存和取的顺序是一样的&#xff1b; Set 系列集合 &#…

综合实验1

一、配置IP地址 [AR1]int g0/0/0 [AR1-GigabitEthernet0/0/0]ip add 192.168.1.254 24 [AR1-GigabitEthernet0/0/0]int se4/0/0 [AR1-Serial4/0/0]ip add 15.1.1.1 24 [AR1-Serial4/0/0] [AR2]int g0/0/0 [AR2-GigabitEthernet0/0/0]ip add 192.168.2.254 24 [AR2-Giga…

Sui与Revolut合作,加速Sui区块链教育和采用

作为全球一体化金融平台&#xff0c;Revolut与Sui合作推出了最新的加密货币学习课程。Revolut拥有全球超过4,000万用户&#xff0c;提供一系列数字银行产品和服务&#xff0c;包括购买和出售加密货币&#xff0c;其中包括SUI。 Revolut的学习计划为其用户提供有关Sui的教育&am…

蓝桥杯嵌入式学习笔记(7):ADC程序设计

目录 前言 1. ADC原理 1.1 主要特性 1.2 模拟输出电路图 2. 使用CubeMX进行源工程的配置 2.1 引脚配置 2.2 配置AD1 2.3 配置AD2 2.4 配置时钟 3. 代码编程 3.1 预备工作 3.2 bsp_adc.h文件编写 3.3 bsp_adc.c文件编写 3.4 main.c编写 3.4.1 时钟函数配置 3…

java子集(力扣Leetcode78)

子集 力扣原题链接 问题描述 给定一个整数数组 nums&#xff0c;数组中的元素互不相同。返回该数组所有可能的子集&#xff08;幂集&#xff09;。解集不能包含重复的子集。可以按任意顺序返回解集。 示例 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3] 输出&#x…

python3将exe 转支持库错误 AssertionError: None does not smell like code

exe -> pyc包(*.exe_extracted) 安装反编译工具 exe反编译工具&#xff1a;pyinstxtractor.py下载&#xff1a;https://sourceforge.net/projects/pyinstallerextractor/ python pyinstxtractor.py hello.exe包反编译 懒的写&#xff01;&#xff01;&#xff01; 这有详…

英语广场期刊投稿发表论文

《英语广场》是由国家新闻出版总署批准的正规期刊&#xff0c;杂志本着“轻松读原作&#xff0c;快乐学英语”的宗旨&#xff0c;倡导“寓学于乐”的学习理念&#xff0c;其活泼的办刊风格和优秀的文章选材受到读者特别是广大中学生的广泛欢迎&#xff0c;取得了良好的社会效益…

redis 的设计与实现(三)——对象

1. 前言&#xff1a; 在第一章节我们了解到了&#xff0c;redis底层所涉及的数据结构&#xff0c;但是这并非是离我们最近的一层&#xff0c;在此之上&#xff0c;redis实现了一层对象与我们交互。我们在本篇内容中将了解到&#xff1a; 对象对应的实现redis一些常用特性的实现…