剑指21: 调整奇数到偶数前
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
1 <= nums.length <= 50000
1 <= nums[i] <= 10000
这个题双指针不复杂,但是可以使用传递函数的方式,这样对于任何排序要求都不需要改变代码内容,加强了代码的重用性。
1 class Solution { 2 public: 3 vector<int> exchange(vector<int>& nums) { 4 if(nums.empty()) return nums; 5 return myexchange(nums,isEven); 6 } 7 8 vector<int> myexchange(vector<int>& nums, bool(*func)(int)){ 9 auto head=nums.begin(), tail=nums.end()-1; 10 while(head<tail){ 11 while(head<tail && !func(*head)) 12 head++; 13 14 while(head<tail && func(*tail)) 15 tail--; 16 17 if(head<tail){ 18 int temp=*head; 19 *head=*tail; 20 *tail=temp; 21 } 22 } 23 return nums; 24 } 25 26 static bool isEven(int n){ 27 return (n&1)==0?true:false; 28 } 29 };