剑指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 };

 

posted @ 2020-07-03 22:45  __rookie  阅读(120)  评论(0编辑  收藏  举报