面试题14:调整数组顺序使奇数位于偶数前面、链表按奇偶拆分

调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变 题目:输入一个整形数组,将数组重新排序,使得所有奇数在前偶数在后,并使奇数之间和偶数之间的相对位置爆出不变。 思想:从数组开头开始遍历所有数组。当碰到偶数时,将偶数打包,即记录到目前为止偶数的个数,把这些偶数看成一个整体;当碰到奇数时,将这个奇数与前面的偶数整体对调位置。 #include #include void nuo(int *a,int j,int nu) 阅读详情

题目1:输入一个数组,实现一个函数调整该数组中的数字顺序,使得奇数在前,偶数在后。

思路:快速排序的分区思想,设置首尾两指针,找到前半部分的偶数和后半部分的奇数,交换即可。

算法复杂度为O(n)。

代码如下:

void ReorderOddEven(vector<int> &data)
{
	int size = data.size();
	int p = 0, q = size-1;
	while(1)
	{
		while(p<q && (data[p] & 0x1) != 0)
		{
			p++;
		}

		while((data[q] & 0x1) == 0)
		{
			q--;
		}

		if(p<q)
		{
			int tmp = data[p];
			data[p] = data[q];
			data[q] = tmp;
		}
		else
		{
			break;
		}
	}
}

判断奇偶,用&运算来计算,a & 0x1 = 0即是偶数,否则为奇数。

如果要保证原来的相对顺序保持不变呢?即保证奇数和奇数,偶数和偶数之间的相对位置不变。

上面的方法就不能用了,得要用平移数组的方式。
每次遍历到奇数,就将前面所有的偶数都往后平移一位,再把该奇数插入到之前的最后一个奇数后面。
代码如下:

void reOrderArray(vector<int> &array) {
   int size = array.size();
   int last_odd = 0;
   for (int i = 0; i < size; ++i) {
     if (array[i] & 1 == 1) {//如果是奇数
       int tmp = array[i];
       //前面所有的偶数往后平移
       for (int j = i; j > last_odd; --j) {
         array[j] = array[j-1];
       }
       //把该奇数插入到之前的最后一个奇数后面
       array[last_odd++] = tmp;
     }
   }
 }

题目2:把一个单链表按奇偶数拆分

思路:构造头节点

vector<ListNode*> seperate(ListNode* head)
{
	ListNode* h1 = new ListNode(0);
	ListNode* h2 = new ListNode(1);
	ListNode* p = head;
	ListNode* r = h1;
	ListNode* s = h2;

	while(p)
	{
		if(p->val %2 == 0)
		{
			r->next = p;
			r = r->next;
		}
		else
		{
			s->next = p;
			s = s->next;
		}
		p = p->next;
	}

	r->next = NULL;
	s->next = NULL;
	h1 = h1->next;
	h2 = h2->next;
	vector<ListNode*> ret;
	ret.reserve(2);
	ret.push_back(h1);
	ret.push_back(h2);
	return ret;
}
PSpice 导入 LTspice 仿真实验 --(如何解决PSpice模型无法使用的错误) 参考了网上第三方器件导入LTspice的博客和资料,不论是哪个公司下载的SPICE模型导入LTspice的方法都类似。如果遇到导入报错的情况可以先看一下报错提示,如果通过语法修改实现功能的则说明可以进行仿真,当然性能可能与官方给的模型存在一点出入,但做一个基本的功能验证本人认为还是可以的,总比做出板子用不了或者完全不匹配的要好一些。 阅读详情

相关推荐

深入解析BLheli电调固件与Dshot通讯协议:从原理到实践

本文深入解析了无人机动力系统的核心——BLheli电调固件与Dshot通讯协议。详细阐述了BLheli固件从经典版到BLheli_32的演进及其功能特性,并重点剖析了Dshot数字协议如何通过数据包和校验码实现更快、更准、更可靠的电机控制。文章还涵盖了双向Dshot遥测、实战配置与调参指南,帮助玩家充分释放无人机性能。

weixin_28273593的博客 434

奇偶链表(将一个链表奇数位排在前偶数位排在后,注意不用排值序)

题目 给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。 请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。 代码 class Solution { public ListNode oddEvenList(ListNode head) { if (head == null || head.next == null || head

qq_29494693的博客 2574

网络攻防技术——MD5碰撞试验

一、题目 本次实验主要是加深大家对MD5碰撞及其原理的理解,使用SEED实验环境中的工具及编程语言,完成以下任务: a)使用md5collgen生成两个MD5值相同的文件,并利用bless十六进制编辑器查看输出的两个文件,描述你观察到的情况; b)参考Lab3_task2.c的代码,生成两个MD5值相同但输出不同的两个可执行文件。 c)参考Lab3_task3.c的代码,生成两个MD5值相同但代码行为不相同的可执行文件。 d)回答问题:通过上面的实验,请解释为什么可以做到不同行为的两个可执行文件具有相同的M

学习记录 3620

13.链表的奇偶重排

链表

okfineyell的博客 329

【MATLAB代码】TDOA+TOA融合算法,高精度定位。通过多边定位解算4个锚点、平面目标的位置,附代码

二维平面下的TOA、TDOA及混合定位算法,通过4个锚节点对目标点进行定位。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 210

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

鸿蒙ArkUI内部API10以及11开发,输入框唤起输入法键盘,页面会被顶起的解决办法

zmx781284440的博客 3214

C++链表偶数在前,奇数在后的简单方法

#include <iostream.h> #include<string.h> #include<iomanip.h> #include<stdio.h> #define MAXLEN 100 struct SeqList{ int data[MAXLEN]; int last; struct SeqList *next; }; /*初始化*/ v...

weixin_43950208的博客 1211

uniapp - 获取设备麦克风权限+麦克风设备列表,用户可选择切换麦克风设备功能,选择麦克风采集设备后点击录制音频外部声音+可随时暂停/继续录音+记录音频录制时长(支持在线播放试听或下载MP3文件)

uniapp获取麦克风设备列表,uniapp录制声音,Uniapp获取麦克风权限,uniapp苹果ios安卓app获取麦克风设备列表,Uniapp H5获取浏览器麦克风并实现录音,Uniapp实现麦克风权限管理与音频录制全流程,uni-app实战案例:实现H5页面麦克风权限获取与录音功能,uni-app音频录制,uniapp麦克风授权窗口,uniapp获取iOS麦克风权限,实现前端录音并播放,把音频传给后端接口处理,获取麦克风并实现录音功能,前端获取/切换麦克风播放采集音频和采集音量大小,前端调用麦克风实现

🏆 前端领域优质创作者 2980

调整数组顺序使奇数位于偶数前面

剑指Offer面试题13 题目: 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。 分析: 时间复杂度为O(n)的方法:(通过 i 结点的前一个结点) 删除节点i之前,先从链表的头结点开始遍历到i前面的一个结点h,把h的next指向i的下一个结点。再删除结点i 时间复杂度为O(1)的方法:(通过 i 结点的后一个结点) 我们可以很方便的找到 i 结点

暖心~的博客 323

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 102

179、瑞芯微RK3588在边缘盒子中的多摄同步架构——基于PLL的帧同步与曝光同步的实测调优

第一,RK3588的多摄同步,硬件上确实支持,但软件配置的坑比想象的多。第三,传感器的tPD差异是最大的不确定因素,选型时尽量选同一批次,而且要在量产前做全温测试——我遇到过低温下tPD变化超过3微秒的情况,直接导致同步失效。我遇到过一批IMX415,tPD差异达到±8微秒,直接超出SYNC控制器的补偿范围,最后只能挑芯片,把差异小的装到同一台设备里。别用100MHz,虽然分辨率更高,但高频信号在PCB走线上更容易引入EMI,边缘盒子的结构件往往没有很好的屏蔽,实测100MHz下同步信号边沿抖动明显增大。

zzfmlxs的博客 36

LeetCode刷题笔记

LeetCode刷题笔记!

qq_40088655的博客 2499

基于STM32设计的遥控小车(手机APP+GPS+温湿度+ESP8266)

一、环境介绍 小车主控MCU: STM32F103ZET6 STM32程序开发IDE: keil5 STM32程序风格: 采用寄存器方式开发,注释齐全,执行效率高,方便移植 手机APP: 采用QT设计,程序支持跨平台编译运行(Android、IOS、Windows、Linux都可以编译运行,对应平台上QT的环境搭建,之前博客已经发了文章讲解) 硬件包含: 淘宝购买的完整一套4轮遥控小车(采用STM32F103ZET6作为主控板)、DHT11温湿度传感器、中科微GPS模块、ESP8266 ...

6万+

集合框架 (六)

Java集合框架是存储和操作数据的核心工具,分为单列集合Collection和双列集合Map两大体系。Collection包括List(有序可重复)、Set(无序不重复)和Queue(队列);Map存储键值对,Key唯一。常用实现类有ArrayList、LinkedList、HashSet、HashMap等,各有特点:ArrayList基于动态数组查询快,LinkedList基于链表增删快,HashSet去重,HashMap键值映射高效。集合提供了丰富的API和遍历方式,支持泛型保证类型安全。开发中需注意线

专注 Java 后端开发,分享基础语法、JVM、并发、Spring 全家桶、微服务、分布式、性能优化等实战干货。坚持输出高质量技术笔记,用简单语言讲清复杂原理,助力每一位 Java 开发者稳步进阶。 239

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Linux

多线程、shell语句、网络编程、mysql数据库、git远程仓库以及redis数据库与缓存的总结性学习

2601_94965056的博客 575

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

链表的奇偶节点重新排列及空指针问题分析【链表、空指针】

链表的奇偶节点重新排列是一个经典的链表操作问题,旨在考察对链表操作顺序的理解与把握。通过正确处理指针的更新顺序,我们可以有效避免空指针异常,确保代码的健壮性。在实现过程中,务必注意链表节点之间的依赖关系,确保每一步操作都建立在正确的逻辑基础之上。

qq_22841387的博客 761

链表的奇偶重排

链表奇偶重排,双指针

Lucky_main的博客 814

剑指offer-----使数组中所有奇数在前,所有偶数在后,并保持相对位置不变

题目:输入一个整数数组,实现一个函数调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数的相对位置不变。 思路:这个题的解法有好多种,我在这里实现了两种解法。 1.快速排序的思想。 ps:关于快速排序的思想,我会在后面的博客中专门介绍各大排序。 int a[]={3,5,4,2,7,8,1,6}; int n

qingcunsuiyue的博客 3546

牛客 刷题 调整数组的顺序 使奇数在前 偶数在后 并且相对位置不变

题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 解题思路: 1 第一种想简单了 没有保证相对位置不变, 用两个指针 一前一后,前面的指针遇到偶数 停下来 后面的指针遇到奇数停下来 然后两个 交换 ,直至前指针的位置比后指针的位置还要后。 2 第...

m0_37896011的博客 1599

【剑指offer】调整链表偶数奇数顺序

题目 给定一个单链表,使得链表中偶数位于奇数之前。 Input: 17-&amp;gt;15-&amp;gt;8-&amp;gt;12-&amp;gt;10-&amp;gt;5-&amp;gt;4-&amp;gt;1-&amp;gt;7-&amp;gt;6-&amp;gt;NULL Output: 8-&amp;gt;12-&amp;gt;10-&amp;gt;4

码农印象 1228

数据结构与算法之奇偶链表

# 奇偶链表 ## 题目 >原题:[328. 奇偶链表 - 力扣(LeetCode)](https://leetcode.cn/problems/odd-even-linked-list/) 给定单链表的头节点head,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。第一个节点的索引被认为是 奇数,第二个节点的索引为偶数,以此类推。 ![](../../assets/Pasted%20image%2020220815112247.png) ## 想法 双指针法 (...

five-five 469

将数组的奇数放在前面,偶数放在后面

场景一:将所有的奇数放在前面,偶数放在后面。 思路:定义左右游标,left和right,当left和right没有相遇的时候,先从左边开始遍历,如果遇到的是偶数,left++,继续寻找,直到找到一个奇数,同理,从右边开始找,找到一个偶数,此时,如果left和right没有相遇,那么交换两个位置的数字。 public class even { public static int[] evenOdd(int[] arr){ int left = 0; int right

qq_42803467的博客 3672

对单链表分割为奇偶有序链表

原理: ①对原链表中数据进行奇偶分布,奇数在前偶数在后 ②对原链表进行遍历,直至遍历至偶数,进行分割 ③对分割后的链表进行排序/头插法建立带头结点的单链表函数/ LinkList *Create_LinkListF( ) { elemtype ix; LinkList *head, *p; head = (LinkList *) malloc (sizeo

Rankir的博客 4849

奇数偶数分开排序

一个10 个整数的序列,要求对其重新排序。排序要求: 奇数在前,偶数在后; 奇数按从大到小排序; 偶数按从小到大排序。 输入格式 输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于100。 输出格式 按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。 输入样例: 4 7 3 13 11 12 0 47 34 98 输出样例: 47 13 11 7 3 0 4 12 34 98 思路:首先...

mao_qing_hao的博客 2285

调整数组顺序使奇数位于偶数前面(python)

一,问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 二,问题分析 1,明确输入输出 输入:一个数组(无序) 输出:一个数组(所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分) 2,选择方法 方法:辅助数组 栗子:输入数组s=【2,5,4,8,9,3,6,7】 2-1, 先放个空数组a=【 】 2-2, for循环遍历s,找到所有

slove3366的博客 1043

剑指 Offer II 026. 重排链表

剑指 Offer II 026. 重排链表: 题目链接 :剑指 Offer II 025. 链表中的两数相加 题目:给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → … 不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路: 1、找到链表中间结点。 2、两部分链表前后分开,后半部分逆转。 3、组成的新链表:奇数位放置前半段节点元素,偶数位

weixin_45750855的博客 2228

调整数组顺序使奇数位于偶数前面,相对位置不变

利用直接插入排序的思想,从第2个元素开始遍历,若是遇到奇数就往前插入,插入位置为前面已经排好序的序列中,最后一个奇数的后面。 public class ReOrder { public static void main(String[] args){ int[] arr={3,4,5,6,7,8,9,10,11}; new ReOrder().reOrd...

qiannuo_的博客 938
上一篇: 面试题8:旋转数组的最小值(Leetcode-153,154)
下一篇: 面试题19:二叉树的镜像&对称二叉树
okiwilldoit
博客等级 码龄17年 86粉丝 283原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值