我試圖解決這個問題。我沒有得到正確的解決方案。請幫助。使用數組的奇數之前的偶數和只有一個循環
問題:返回一個包含與給定數組完全相同的數字但重新排列的數組,以便所有偶數都出現在所有奇數之前。除此之外,數字可以按任何順序排列。您可以修改並返回給定的數組,或者創建一個新的數組。
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的分區算法。你只需要將分區應用一次。 –