题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
思路:双指针前后遍历(类似于快速排序的思想)
定义两个指针分别为left和right,left从数组第一个元素开始向后遍历,right从数组最后一个元素开始向前遍历。
当left遇到奇数(不管right是奇数还是偶数),继续先后走;当right遇到偶数(不管left是偶数还是奇数),继续向后走。
当left遇到偶数且right遇到奇数时,交换left和right所指向的元素值。
继续上述步骤,直到left >= right。结束遍历,返回原数组即为所求。
代码
class Solution {
public int[] exchange(int[] nums) {
if(nums == null || nums.length == 0) {
return nums;
}
int left = 0, right = nums.length - 1;
while(left < right) {
while(left < right && nums[left] % 2 != 0) {
left++;
}
while(left < right && nums[right] % 2 != 1) {
right--;
}
int temp = nums[left];
nums[left] = nums[right];
nums[right] = temp;
}
return nums;
}
}
本文介绍了一种通过双指针遍历实现的数组排序算法,该算法能够将数组中的奇数与偶数分别放置于数组的前半部分与后半部分。通过具体的示例和代码实现了这一功能。
337

被折叠的 条评论
为什么被折叠?



