剑指offer(C++)-JZ21:调整数组顺序使奇数位于偶数前面(一)(算法-其他)

news2024/10/5 12:42:43

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

输入一个长度为 n 整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前面部分,所有的偶数位于数组的后面部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

数据范围:0≤n≤5000,数组中每个数的值0≤val≤10000

要求:时间复杂度 O(n),空间复杂度 O(n)

进阶:时间复杂度 O(n2),空间复杂度 O(1)

示例:

输入:

[2,4,6,5,7]

返回值:

[5,7,2,4,6]

解题思路:

本题考察算法思维。两种解题思路:

1)定位法

       进行一次遍历,确认奇数数量;再次遍历,以奇数数量作为偶数开始放置的下标,完成分割线的定位;以0作为奇数开始放置的下标,再进行一次遍历即可,记得下标刷新。

2)分组法

       巧妙应用stable_partition函数和Lamda表达式,stable_partition函数是稳定的分组函数,通过Lamda表达式确认分组的要求,将奇数分一组,偶数分一组,分组后其相对位置也不变。

测试代码:

1)定位法

#include <vector>
class Solution {
public:
    // 重排序
    vector<int> reOrderArray(vector<int>& array) {
        int size = int(array.size());
        vector<int> result(size);
        // 统计奇数个数
        int odd = 0;
        for(int i = 0; i < size; ++i){
            if(array[i] % 2){
                odd++;
            }
        }
        // 放置数据
        int o = 0;
        int e = odd;
        for(int i = 0; i < size; ++i){
            if(array[i] % 2){
                result[o] = array[i];
                o++;
            }
            else{
                result[e] = array[i];
                e++;
            }
        }
        return result;
    }
};

2)分组法

#include <vector>
class Solution {
public:
    // 重排序
    vector<int> reOrderArray(vector<int>& array) {
        stable_partition(array.begin(), array.end(), [](int x){
            return x % 2 == 1;
        });
        return array;
    }
};

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

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

相关文章

外贸SEO外链类型有哪些?外链建设如何做?

外贸SEO外链资源怎么找&#xff1f;海洋建站SEO外链优化方法&#xff1f; 外贸SEO外链在提高网站排名、吸引流量、增加品牌曝光方面发挥着重要作用。海洋建站将探讨外贸SEO外链的不同类型&#xff0c;帮助外贸企业更好地理解如何优化他们的在线营销策略。 外贸SEO外链&#x…

【PostgreSql高阶语法 】1、CASE WHEN THEN END用法

目录 1. 基础描述2. 用法举例2.1 基础使用2.1.1 方式12.1.2 方式 2 2.2 进行分组2.3 分组练习举例 1. 基础描述 目的&#xff1a;在SQL语句中添加判断条件&#xff0c;就要用到CASE WHEN THEN END用法&#xff1a;类似于java里面的switch语句&#xff0c;一组CASE WHEN THEN E…

香港和美国节点服务器的测试IP哪里有?

在选择服务器时&#xff0c;我们通常需要进行一些测试来评估其性能和稳定性。当然&#xff0c;这其中一个重要的测试指标就是服务器的 IP 地址。通过测试 IP 地址&#xff0c;我们可以了解到服务器所在地区以及网络连接质量等信息。作为香港及亚太数据中心领先服务商恒创科技&a…

五种常见的IO模型

目录 一. IO的概述 1.1 什么是IO 1.2 IO的效率问题 1.3 同步IO和异步IO的概念 二. 阻塞式IO 三. 非阻塞式IO 四. 信号驱动式IO 五. IO多路复用 六. 异步IO 七. 总结 一. IO的概述 1.1 什么是IO IO&#xff0c;表示输入输出&#xff0c;即&#xff1a;InPut / OutPut…

苹果15OTG音频转接器方案大卖-无敌成本加兼容性性价比直接拉满

手机拓展坞的组合有何意义&#xff1f;首先是数据存储场景&#xff0c;借助拓展坞扩展出的接口&#xff0c;可以连接U盘、移动硬盘等采用USB接口的设备&#xff0c;实现大文件的快速存储或者流转&#xff1b;其次是图片、视频的读取场景&#xff0c;想要读取相机、无人机SD/TF存…

第十周学习记录

阅读MARS MARS创新点&#xff1a; (1)实例感知。模拟器使用独立的网络分别对前景实例和背景环境进行建模&#xff0c;以便可以单独控制实例的静态&#xff08;例如大小和外观&#xff09;和动态&#xff08;例如轨迹&#xff09;属性。 (2)模块化。模拟器允许在不同的 NeRF 主干…

python操作链接数据库和Mysql中的事务在python的处理

python操作数据库 pymysql模块: pip install pymysql作用:可以实现使用python程序链接mysql数据库&#xff0c;且可以直接在python中执行sql语句 添加操作 import pymysql #1.创建链接对象c conn pymysql.Connect(host127.0.0.1,#数据库服务器主机地址port3306, #mysql的端口…

Pytest系列之参数化

1.parametrize()实现数据驱动 1.1 方法参数详解 pytest.mark.parametrize(arg_name, arg_value) arg_name:参数名称&#xff0c;用于将参数值传递给测试用例 arg_value:参数值(支持列表、字典列表、元组和字典元组)&#xff0c;有n个值&#xff0c;那么测试用例就将执行n次…

node 第十七天 使用rsa非对称加密 实现前后端加密通信 JSEncrypt和node-rsa

什么是非对称加密 加密过程需要两个钥匙, 公钥和私钥 其中公钥用于加密明文, 私钥用于解密公钥加密的密文, 解密只可以用私钥 公钥和私钥是一对一的关系 公钥可以发送给用户, 不用担心泄露 私钥需要保存在服务端, 不能泄露 例如: 战场上&#xff0c;B要给A传递一条消息&#xf…

VC6.0 高亮扩展

输入关键字 "asist vc6.0" 点击网页&#xff1a; https://wws.lanzouj.com/isNmZe9ap2f 几秒后下载成功 在VS2021 安装以下这个扩展 打开vc6.0 代码有高亮了

Python四种常见实现排序方法,干活教程分享~

文章目录 1.冒泡排序2.选择排序3.快速排序4.插入排序关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小游戏源码五、面试资料六、Python兼职渠道 1.冒泡排序…

软件模拟SPI协议的理解和使用编写W25Q64

SPI软件模拟的时序 SPI协议中&#xff0c;NSS、SCK、MOSI由主机产生&#xff0c;MISO由从机产生&#xff0c;在SCK每个时钟周期MOSI、MISO传输一位数据&#xff0c;数据的输入输出是同时进行的&#xff0c;所以读写数据也可以视作交换数据。所以读写时对数据位的控制都是用同一…

输出自然数-第10届蓝桥杯国赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第7讲。 输出自然数&#x…

CSS3 多媒体查询、网格布局

一、CSS3多媒体查询&#xff1a; CSS3 多媒体查询继承了CSS2多媒体类型的所有思想&#xff0c;取代了查找设备的类型。CSS3根据设置自适应显示。 多媒体查询语法&#xff1a; media not|only mediatype and (expressions) { CSS 代码...; } not: not是用来排除掉某些特定…

一文5个步骤从0到1实现Jmeter分布式压力测试(建议收藏)

之前写过用jmeter做接口测试的文章&#xff0c;本篇我们继续介绍下用jmeter做分布式压力测试的例子。 用jmeter做压力测试&#xff0c;如果只用一台机器&#xff0c;有鉴于线程数的限制和一台机器的性能&#xff0c;可能无法满足压力测试的实际需求&#xff0c;解决这个问题&a…

Postman使用json提取器和正则表达式实现接口的关联

近期在复习Postman的基础知识&#xff0c;在小破站上跟着百里老师系统复习了一遍&#xff0c;也做了一些笔记&#xff0c;希望可以给大家一点点启发。 一&#xff09;使用json提取器实现接口关联 实际项目场景&#xff0c;在财务信息页面&#xff0c;需要上传一个营业执照&…

【已验证】php配置连接sql server中文乱码(解决方法)更改utf-8格式

解决数据库中的中文数据在页面显示乱码的问题 在连接的$connectionInfo中设置"CharacterSet" > "UTF-8"&#xff0c;指定编码方式即可 $connectionInfo array("UID">$uid, "PWD">$pwd, "Database">$database…

黑马程序员微服务SpringCloud实用篇01

SpringCloud01 1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.0.学习目标 了解微服务架构的优缺点 1.1.单体架构 单体架构&#xff…

ChatGPT 上新,效果炸裂,知识平台才是大模型的最佳狩猎场

数新网络_让每个人享受数据的价值浙江数新网络有限公司是一家开源开放、专注于云数据智能操作系统和数据价值流通的服务商。公司自主研发的DataCyber云数据智能操作系统&#xff0c;主要包括数据平台CyberData、人工智能平台CyberAI、数据智能引擎CyberEngine、数据安全平台Cyb…

希亦ACE和石头m1这两款内衣洗衣机哪一款更好?高性价比内衣洗衣机测评

内衣洗衣机可以说是近两年很火爆的小家电了&#xff0c;给大家带了一种全新的时尚体验&#xff0c;越来越内衣裤也可以用手洗&#xff01;而且还比手洗得干净&#xff01;不过现在市面上关于内衣洗衣机的品牌越来越多&#xff0c;小伙伴们想要挑选一款性价比高的内衣洗衣机看得…