给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。
时间: 2023-05-31 22:01:22 浏览: 136
一种解法是使用双指针,一个指针从数组头部开始,另一个指针从数组尾部开始,分别向中间移动,当左指针指向的元素为奇数,右指针指向的元素为偶数时,交换两个指针指向的元素。直到左指针和右指针相遇为止。
代码如下:
```python
def sortArrayByParity(nums):
left, right = 0, len(nums) - 1
while left < right:
if nums[left] % 2 == 0:
left += 1
elif nums[right] % 2 == 1:
right -= 1
else:
nums[left], nums[right] = nums[right], nums[left]
left += 1
right -= 1
return nums
```
时间复杂度为 O(n),空间复杂度为 O(1)。
相关问题
给你一个整数数组 nums = [3,1,2,4],将 nums中的所有偶数元素移动到数组的前面,后跟所有奇数元素。 用java解决
你可以使用双指针技巧来解决这个问题,在Java中可以这样做:
```java
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
int[] nums = {3, 1, 2, 4};
List<Integer> result = separateEvenOdd(nums);
for (int num : result) {
System.out.print(num + " ");
}
}
public static List<Integer> separateEvenOdd(int[] nums) {
List<Integer> evenList = new ArrayList<>();
List<Integer> oddList = new ArrayList<>();
// 使用两个指针,一个从头开始,一个从尾开始
int left = 0, right = nums.length - 1;
while (left < right) {
if (nums[left] % 2 == 0) { // 如果左指针指向的是偶数
evenList.add(nums[left]);
left++;
} else { // 如果左指针指向的是奇数
oddList.add(nums[left]);
left++;
}
if (right % 2 == 0) { // 如果右指针指向的是偶数
oddList.add(nums[right]);
right--;
} else { // 如果右指针指向的是奇数
evenList.add(nums[right]);
right--;
}
}
// 将两个列表合并
return evenList.addAll(oddList);
}
}
```
运行上述代码后,数组`nums`会被转换成[2, 4, 3, 1]的形式,其中所有的偶数在前,奇数在后。
按照奇偶排序数组给一个整数数组nums,将nums中的的所有偶数元素移动到数组的前面,所有奇数元素跟在后面
这种操作可以使用双指针法来完成,同时维护两个指针i和j。初始时,i指向数组的第一个元素,j指向数组的最后一个元素。然后,我们遍历数组,如果遇到偶数(nums[i]是偶数),就交换nums[i]和nums[j],然后i向前移动一位;如果遇到奇数,i不变。当i < j时继续这个过程。最后,i处的元素就是数组的最后一个奇数,而剩下的都是偶数。
以下是具体的Python代码示例:
```python
def sortArrayByParity(nums):
i, j = 0, len(nums) - 1
while i < j:
# 当前奇数移到最右边
if nums[i] % 2 != 0:
nums[i], nums[j] = nums[j], nums[i]
j -= 1
else:
# 当前偶数移到左边
i += 1
return nums
# 测试例子
nums = [1, 2, 3, 4, 5]
sorted_nums = sortArrayByParity(nums)
print("Sorted array:", sorted_nums)
阅读全文