码迷,mamicode.com
首页 > 其他好文 > 详细

剑指21: 调整奇数到偶数前

时间:2020-07-03 23:00:26      阅读:49      评论:0      收藏:0      [点我收藏+]

标签:复杂   als   一个   cto   奇数   head   UNC   ++   指针   

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

 

示例:

输入: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 };

 

剑指21: 调整奇数到偶数前

标签:复杂   als   一个   cto   奇数   head   UNC   ++   指针   

原文地址:https://www.cnblogs.com/rookiez/p/13233084.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!