题目14:调整数组使奇数位于偶数前面(leetcode链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/)
题目分析
方法1:完成基本功能的解法
维护两个指针,一个指向数组的开始位置另一个指向数组的结束位置,移动两个指针,如果前边指针指向的是偶数后边指针指向的是奇数,交换两个指针的值。
方法2:升级版
上面两种改进方法是没有任何问题的,但是我们可以发现上述问题都是同一类问题,代码的基本框架都是相同的。为了实现不同的功能每次定义新的函数,使得代码容易。解决同类问题最好的方法就是使用函数指针,针对不同的同类功能,使用函数指针作为判断依据,减少冗余代码提高程序的可读性。
代码描述
方法1
class Solution {
public:
vector<int> exchange(vector<int>& nums) {
//如果数组为空,或者只有一个元素时,直接返回。
if(nums.size() <= 1)
return nums;
vector<int>::iterator begin = nums.begin();
vector<int>::iterator end = nums.end()-1;
//前后比较,如果前边为偶数后边为奇数就交换
while(begin < end)
{
while(begin < end && *begin%2 != 0)
{
begin++;
}
while(begin < end && *end%2 == 0)
{
end--;
}
int temp = *begin;
*begin = *end;
*end = temp;
}
return nums;
}
};