我试图解决这个问题。我没有得到正确的解决方案。请帮助。使用数组的奇数之前的偶数和只有一个循环
问题:返回一个包含与给定数组完全相同的数字但重新排列的数组,以便所有偶数都出现在所有奇数之前。除此之外,数字可以按任何顺序排列。您可以修改并返回给定的数组,或者创建一个新的数组。
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]
public int[] evenOdd(int[] nums) {
int l = nums.length;
if(l<2)
return nums;
int j=l-1;
for(int i=0;i<l;i++)
{
if(nums[i]%2==1)
{
while(j>i && nums[j]%2!=0) {
j--;
}
int t=nums[i];
nums[i]=nums[j];
nums[j]=t;
j--;
}
}
return nums;
}
在你的例子中,你正在使用2个循环(用于和while),你在标题中说明你只能使用一个循环?那么你需要什么? – Asoub
@Abhishek Sharma:请看看我的O(N)时间和O(1)空间复杂度解决方案...... –
这基本上是quicksort的分区算法。你只需要将分区应用一次。 –