点击查看剑指Offer全解【Java & Golang】实现
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
。
思路
第一种
最直观的思路是使用额外的数组空间,先将奇数添加进去,再将偶数添加进去即可。
第二种思路是通过插入排序的稳定性来实现的,首先定义已经插入的奇数个数k,然后循环遍历每一个值,当其为奇数将其调整到已插入的k个奇数之后,时间复杂度O(n),空间复杂度O(1)。
Java实现
public class Solution {
public void reOrderArray(int [] array) {
int[] aux = new int[array.length];
int cur = 0;
for (int i = 0; i < array.length; i++) {
if ((array[i] & 1) == 1) {
aux[cur++] = array[i];
}
}
for (int i = 0; i < array.length; i++) {
if ((array[i] & 1) != 1) {
aux[cur++] = array[i];
}
}
for (int i = 0; i < array.length; i++) {
array[i] = aux[i];
}
}
}
public class Solution {
public void reOrderArray(int [] array) {
// 采用插入排序的思想
// 当前已排序的奇数个数
int k = 0;
for (int i = 0; i < array.length; i++) {
// 如果是奇数,那么需要将其往前调整
if ((array[i] & 1) == 1) {
int j = i;
while (j >= k + 1) {
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
j--;
}
k++;
}
}
}
}
本文介绍了一种算法,用于调整整数数组中数字的顺序,确保所有奇数位于数组前半部分,所有偶数位于后半部分,同时保持奇数和偶数内部的相对位置不变。提供了两种实现思路:使用额外数组空间和基于插入排序稳定性的方法。
172万+

被折叠的 条评论
为什么被折叠?



