题目:调整数组顺序使奇数位于偶数前面
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
解题思路
解法1
最直接的思路是再构建一个新数组,先遍历一遍原数组,把其中的奇数依次添加到新数组中,再遍历一遍原数组把其中的偶数依次添加到新数组中,时间复杂度为O(2n)。
解法2
C#的数组是不支持动态添加元素的,我们可以使用泛型List,来实现在指定位置插入元素。基本思路是遍历原数组,依次将元素插入到List中,如果是偶数元素,默认插入到List的末尾。如果是奇数元素,则插入到所有的偶数元素之前(已插入的所有奇数元素之后),因此需要记录最后插入的奇数元素的索引。算法的时间复杂度是O(n)。
解法3
基本思路是遍历原数组,如果遇到了奇数元素,就将该元素向前移动,该元素前面的偶数元素都依次向后移动。
参考代码
解法1
class Solution
{
public int[] reOrderArray(int[] array)
{
// write code here
int[] newArray = new int[array.Length];
int j=0;
for(int i=0;i<array.Length;i++)
{
if(array[i]%2 != 0) //奇数
{
newArray[j] = array[i];
j++;
}
}
for(int i=0;i<array.Length;i++)
{
if(array[i]%2 == 0) //偶数
{
newArray[j] = array[i];
j++;
}
}
return newArray;
}
}
解法2
using System.Collections.Generic;
class Solution
{
public int[] reOrderArray(int[] array)
{
// write code here
List<int> list = new List<int>();
// 最后插入奇数元素的索引
int index = 0;
for (int i=0;i<array.Length;i++)
{
if ((array[i] % 2) == 0) //偶数
list.Add(array[i]);
else //奇数
{
list.Insert(index, array[i]);
index++;
}
}
return list.ToArray();
}
}
解法3
class Solution
{
public int[] reOrderArray(int[] array)
{
// write code here
for(int i=0; i<array.Length; i++)
{
if(array[i]%2 != 0) //奇数
{
int temp = array[i];
int j=i-1;
for(; j>=0; j--) //把该奇数前的偶数向后移动1位
{
if(array[j]%2 != 0)
break;
array[j+1] = array[j];
}
array[j+1] = temp; //把该奇数放在所有偶数之前
}
}
return array;
}
}
博客介绍了如何在C#中调整整数数组,使得奇数位于前半部分,偶数位于后半部分,同时保持数字间的相对位置不变。提供了三种解题思路:一是通过构建新数组实现,二是利用List动态插入元素,三是通过移动元素实现。每种解法都有对应的详细说明和实现代码。
_ 调整数组顺序使奇数位于偶数前面&spm=1001.2101.3001.5002&articleId=100173865&d=1&t=3&u=4654ba66e0024c30a9ed4928b2dbbeb1)
5947

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



