gpt4 book ai didi

java - 在Java中用一个循环解决codingBat 'evenOdd'问题

转载 作者:行者123 更新时间:2023-12-01 08:02:40 25 4
gpt4 key购买 nike

问题是关于解决 this Java 中的codingBat 问题。

问题陈述:

返回一个数组,其中包含与给定数组完全相同的数字,但已重新排列,以便所有偶数位于所有奇数之前。除此之外,数字可以按任何顺序排列。您可以修改并返回给定的数组,或者创建一个新数组。

evenOdd({1, 0, 1, 0, 0, 1, 1}) → {0, 0, 0, 1, 1, 1, 1}

evenOdd({3, 3, 2}) → {2, 3, 3}

evenOdd({2, 2, 2}) → {2, 2, 2}

问题很简单,有 2 个循环,我尝试用 1 个循环解决它,但它太长了,我相信,是否有其他有效的方法来使用 1 个循环解决上述问题?不要使用集合!

我的解决方案:

public int[] evenOdd(int[] nums) {

boolean oddFound=false;
int count=-1;
int oddGap=0;

for(int i=0;i<nums.length;i++)
{
if(!(oddFound)&(nums[i]%2==0))
continue;

if((!oddFound)&(nums[i]%2==1))
{
oddFound=true;
count=i;
continue;
}
if((oddFound)&(nums[i]%2==1))
{
oddGap++;
continue;
}
if((oddFound)&(nums[i]%2==0))
{
int temp=nums[count];
nums[count]=nums[i];
nums[i]=temp;

if(i>0)
i--;

if(oddGap>0)
{
oddGap--;
count+=1;
oddFound=true;
continue;
}
oddFound=false;
}

}
return nums;

}

最佳答案

由于允许创建新数组,并且数字的顺序无关,因此我将使用以下方法:

public int[] evenOdd(int[] nums) {
int[] output = new int[nums.length];
int evenPos = 0;
int oddPos = nums.length-1;
for (int i : nums) {
if (i%2==0) {
output[evenPos++]=i;
} else {
output[oddPos--]=i;
}
}

return output;
}

更新:一个可读性稍差的版本,不需要额外的数组(按照@Seelenvirtuose的建议,只是没有额外的循环)

public int[] evenOdd(int[] nums) {
int evenPos = 0;
int oddPos = nums.length-1;
while (true) {
if (evenPos>=oddPos || evenPos>=nums.length || oddPos<0) {
break;
}

if (nums[evenPos]%2==0) {
evenPos++;
}
if (nums[oddPos]%2!=0) {
oddPos--;
}

if (evenPos<oddPos && nums[evenPos]%2 != 0 && nums[oddPos]%2 == 0) {
int tmp = nums[evenPos];
nums[evenPos] = nums[oddPos];
nums[oddPos] = tmp;

oddPos--;
evenPos++;

}
}
return nums;
}

关于java - 在Java中用一个循环解决codingBat 'evenOdd'问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24055378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com