时间:
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;//最终返回的是前进的第一个偶数
}
}
感想:
好长时间没有写算法,思路过于笨拙了