• 剑指offer21.调整数组顺序使奇数位于偶数前面


     方法一:一般方法:

    代码如下:

     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 }
  • 相关阅读:
    linux openresty 安装(图文死磕)
    openresty lua 调试 (图文死磕)
    windows openresty 死磕:安装和启动脚本
    SpringBoot SpringCloud 热部署 热加载 热调试
    SpringCloud 亿级流量 架构演进
    Zuul 详解,带视频
    Zuul Swagger 整合
    时间序列分解-STL分解法
    ISLR系列:(4.3)模型选择 PCR & PLS
    ISLR系列:(4.2)模型选择 Ridge Regression & the Lasso
  • 原文地址:https://www.cnblogs.com/sbb-first-blog/p/13412624.html
Copyright © 2020-2023  润新知