首页 > 试题广场 >

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

[编程题]调整数组顺序使奇数位于偶数前面
  • 热度指数:887019 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
头像 牛客题解官
发表于 2020-05-29 15:10:40
精华题解 描述 此题解是针对初学者的全面讲述,用三种方法来解决。知识点:数组难度:一星 题解 方法一:使用辅助数组 函数的类型为void func_name(array&),想让我们不开辟额外数组来解决,使用in-place就地算法。但是如果空间要求不高的话,我们还是可以开挂的。也就是开辟个额外数组 展开全文
头像 Ariser.cn
发表于 2019-08-21 16:37:38
思路:参考快速排序 i++往前走碰到偶数停下来,j = i+1 若 a[j]为偶数,j++前进,直到碰到奇数 a[j]对应的奇数插到a[i]位置,j经过的j-i个偶数依次后移 如果j==len-1时还没碰到奇数,证明i和j之间都为偶数了,完成整个移动 class Solution { p 展开全文
头像 PualrDwade
发表于 2019-09-12 17:54:37
一个很容易理解的解法,时间复杂度为o^2我们可以借鉴冒泡排序的特点,让偶数不断向右边移动,而冒泡的过程本身也可以保证相对顺序的不变,最后所有的偶数都移动到了右边,最坏情况下外层循环需要进行array.size()次。 class Solution { public: void reOrder 展开全文
头像 back201811142225988
发表于 2019-09-27 23:35:57
遍历数组,从0到n,如果是奇数,i++,如果是偶数,将这个偶数插入到数组末尾,然后删除这个偶数,同时n--,确保不会出现全是偶数的情况下死循环或者遍历到了新插入的偶数上。 # -*- coding:utf-8 -*- class Solution: def reOrderArray(self 展开全文
头像 aidisen
发表于 2019-08-26 19:41:32
move elements public class Solution { public void reOrderArray(int [] array) { if(array==null || array.length ==0){ return ; 展开全文
头像 jalr4ever
发表于 2019-08-25 21:44:03
剑指 - 调整数组奇数位于偶数前 题目 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 思路 使用两个队列,一个存奇数,一个存偶数,然后依次将数赋值回原数组 总结 位运算的实 展开全文
头像 道阻且长z
发表于 2019-09-25 01:35:31
思路: 开辟新数组保存法:创建两个数组,一个用来存奇数,一个用来存偶数,最后合并。 不开辟新数组: 1.用两个下标i,j进行遍历; 2.当i走到偶数时停下,并让j从i的后一个元素开始遍历;(若i走到队尾则循环结束) 3.若j所指的是偶数则继续前进,j遇到奇数则停下(如果j都没遇到奇数则在队尾停 展开全文
头像 Johnnyhuang
发表于 2020-04-15 00:55:42
这道题很明显是利用排序算法解决实际问题的题由于要保证奇数和奇数,偶数和偶数之间的相对位置不变。即排序算法要具有稳定性: 冒泡,插入,并归,计数,基数,桶这里分别修改冒泡排序(20ms),插入排序(25ms),并归排序(14ms)来解决这个问题 1. 冒泡法 O(n^2) Java 20ms 这里考 展开全文
头像 BillyHao
发表于 2020-01-06 09:36:40
思路,把原数组分成一个奇数组一个偶数组,再按顺序复制回去,这样,只需要遍历两次原数组即可。(一次读出,一次写入)空间效率下降,因为额外有两个数组用于记录,但时间效率较好。 public void reOrderArray(int [] array) { //所以此时,这两个array长度都= 展开全文
头像 青空2020
发表于 2020-04-03 16:06:46
用两个list分别存入奇数和偶数,再将奇数和偶数按顺序放入数组即可。 public void reOrderArray(int [] array) { ArrayList<Integer> l1 = new ArrayList<>(); Arr 展开全文
头像 糊秃秃
发表于 2019-08-23 13:14:47
插入排序过程中,序列分为已遍历部分和未遍历部分,已遍历序列有序,未遍历序列有序性未知,为了做到这一点,在每遍历每一个数时O(n),依次在已遍历序列中从后往前比较O(n),将当前数放入适当位置,直至未遍历部分为空O(n ^ 2)。相当于摸牌将牌组分为,手中的牌和牌组中的牌,手中的牌有序,牌组中的牌有序 展开全文