一、题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
二、题目解析&思路分析
这是一道比较简单的题,左右交换即可,
交换最后的结果为 左边是奇数,右边是偶数
方法:
使用两个指针,分别从数组的左边和右边开始,逐个下标元素进行比对,
左边是偶数,右边是奇数则就交换,
左边是奇数就继续往右遍历,右边是偶数就继续往左遍历
图示:
继续比较
有点快排的感觉是不
三、代码实现
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
int i = 0;
int j = nums.size()-1;
//循环结束条件
while(i < j)
{
//左偶右奇 交换
if (( nums[i] % 2 == 0) && (nums[j] %2 != 0))
{
int iTemp = nums[i];
nums[i] = nums[j];
nums[j] = iTemp;
}
else
{
//否则继续向左或者向右遍历
if(nums[i] % 2 != 0)
{
i++;
}
if(nums[i] % 2 == 0)
{
j--;
}
}
}
return nums;
}
};
运行结果: