方法一:一般方法:
代码如下:
1 int* exchange(int* nums, int numsSize, int* returnSize){ 2 int *new=(int *)malloc(sizeof(int)*numsSize);//定义一个新数组用来存放调整后的数组 3 int index=0,k=numsSize-1; 4 for(int i=0;i<numsSize;i++) 5 { 6 if(nums[i]%2!=0) 7 { 8 new[index++]=nums[i]; //新数组从头开始存放奇数 9 } 10 else 11 { 12 new[k]=nums[i]; //新数组从尾部开始存放偶数 13 k--; 14 } 15 } 16 *returnSize=numsSize; 17 return new; 18 19 }
方法二:双指针
1、定义一个left,令left=0,指向第一个元素,定义一个right,令right=numsSize-1指向最后一个元素。
2、left向右移,直到指向偶数
3、right向左移,直到指向奇数
4、交换nums[left]和nums[right]的值
5、重复以上操作,直到left==right.
1 void swap(int* nums,int i,int j) //交换函数,交换奇数和偶数 2 { 3 int temp=nums[i]; 4 nums[i]=nums[j]; 5 nums[j]=temp; 6 } 7 int* exchange(int* nums, int numsSize, int* returnSize){ 8 int left=0,right=numsSize-1; 9 while(left<right) 10 { 11 if(nums[left]%2!=0) 12 { 13 left++; 14 continue; 15 } 16 if(nums[right]%2==0) 17 { 18 right--; 19 continue; 20 } 21 if ((nums[left] % 2) == 0&& (nums[right] % 2) == 1) { 22 swap(nums,left,right); 23 left++; 24 right--; 25 26 } 27 } 28 *returnSize=numsSize; 29 return nums; 30 }
方法三:快慢指针
使用快慢指针
慢指针:定位偶数
快指针:定位奇数
两指针的数值进行交换
例如:
1,2,3,4
1,2(slow),3(fast),4
1,3,2(slow),4(fast)
end;
作者:sugar-31
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/solution/kuai-man-zhi-zhen-zai-yuan-shu-zu-shang-jin-xing-x/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
1 void swap(int* nums,int i,int j) 2 { 3 int temp=nums[i]; 4 nums[i]=nums[j]; 5 nums[j]=temp; 6 } 7 int* exchange(int* nums, int numsSize, int* returnSize){ 8 int slow=0; 9 //求第一个偶数 10 while(slow<numsSize&&nums[slow]%2!=0) 11 { 12 slow++; 13 } 14 int fast=slow+1; 15 while(fast<numsSize) 16 { 17 //找奇数 18 if(nums[fast]%2!=0) 19 { 20 swap(nums,slow,fast); //奇数和偶数交换 21 slow++; 22 } 23 fast++; 24 } 25 *returnSize=numsSize; 26 return nums; 27 }