題目:輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
解題思路:重新創建一個新數組,然後順序遍歷原數組,找出其中的奇數,然後將其尾插到新數組,然後再次順序遍歷原數組,找出其中的偶數,然後再順序尾插到新數組,最後將新數組賦給原數組。
代碼示例如下:
class Solution {
public:
void reOrderArray(vector<int> &arr)
{
vector<int> newarr;
int i = 0;
int j = 0;
for(; i < arr.size(); i++)
{
if(arr[i] % 2 == 1)
{
newarr.push_back(arr[i]);
}
}
while( j < arr.size())
{
if(arr[j] % 2 == 0)
{
newarr.push_back(arr[j]);
}
j++;
}
arr = newarr;
///////////////////////////////////////////////////////
/*
int i = 0;
int j = arr.size() - 1;
int tmp = arr[i];
while(i < j)
{
while(i < j && (arr[j] % 2 == 0))
{
j--;
}
if(i < j)
{
arr[i] = arr[j];
}
while(i < j && (arr[i] % 2 == 1))
{
i++;
}
if(i < j)
{
arr[j] = arr[i];
}
}
arr[i] = tmp;
*/
////////////////////////////////////////////////////////
}
};
測試結果如下: