leetcode刷题-按奇偶数组排序1

时间:
2022.10.26
名称:
按奇偶数组排序
顺序:
1
语言:
Java
思路:
1.首先判断是否存在全是奇数或全是偶数的情况 [0,2]
2.奇数和偶数混杂则需要拆开
2.1.从0下标开始往后找第一个奇数位置和第一个偶数位置
2.2.如果奇数下标大于偶数,则进行位置互换 [3,1,2,4]
2.3.如果偶数下标大于奇数,在没有结束的前提下,从奇数后面开始找下一个偶数 [0,1,2]
2.4.重复上述步骤,直到找到了最后一个位置结束
代码:

class Solution {
    public int[] sortArrayByParity(int[] nums) {
        int flag1=0;//指向下一不是偶数的位置下标
        int flag2=0;//指向下一是偶数的位置下标
        int len=nums.length;//获得数组的长度
        //1.首先先找到flag1的值
        //2.找到下一不是偶数的值的下标flag2
        //3.两者互换
        //直到flag1==len
        //是否还得先判断一下是否全是奇数或是全是偶数
        Boolean temp1=false;
        Boolean temp2=false;
        for(int j=0;j<len;j++)
        {
            if(nums[j]%2==0)
            {
                temp1=true;//说明有偶数
            }
            else if(nums[j]%2!=0)
            {
                temp2=true;//说明有奇数
            }
        }
        if(!(temp1&&temp2))
        {
            //说明只有偶数或是只有奇数
            return nums;
        }
        do{
            flag1=find1(nums,len,flag1);//得到flag1
            flag2=find2(nums,flag2,len);//得到flag1
          if(flag1<flag2)
          {
            //两者互换
            int temp=0;
            temp=nums[flag1];
            nums[flag1]=nums[flag2];
            nums[flag2]=temp;
          }
          else
          {
              if((len-1)==flag2||(len-1)==flag1)
              {
                  //该结束了
              }
              else{
                  flag2=flag1;
              }
              //如果不是要结束了 说明没有换,那就得继续往后找,两个都加1
          }
        }while((len-1)!=flag2&&(len-1)!=flag1);
        return nums;
    }
    int find1(int[] nums,int len,int flag1)
    {
        int i=flag1;
        while(i<len-1&&(nums[i]%2==0||nums[i]==0))
        {
            //说明是偶数
            i++;
        }
        return i;//最终返回的是第一个奇数
    }
    int find2(int[] nums,int flag2,int len)
    {
        int i=flag2;
        while(nums[i]%2!=0&&i<len-1)
        {
            //说明是奇数
            i++;
        }
        return i;//最终返回的是前进的第一个偶数
    }
}


感想:
好长时间没有写算法,思路过于笨拙了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值