输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4] 输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
解法:
二,双指针实现
我们可以使用两个指针left和right。left从左边开始扫描,如果是奇数就往右走,如果遇到偶数就停下来(此时left指向的是偶数),right从右边开始扫描,如果是偶数就往左走,如果是奇数就停下来(此时right指向的是奇数),交换left和right指向的值。继续循环,直到left==right为止。我们就以数组[3,2,4,9,5,8,1]为例来画个图看一下
1 /*调整数组顺序使奇数位于偶数前面*/ 2 public int[] exchange(int[] nums) { 3 if (nums == null | nums.length == 0) { 4 return nums; 5 } 6 int letf = 0; 7 int right = nums.length - 1; 8 while (letf < right) { 9 while (letf < right && nums[letf] % 2 == 1) { 10 letf++; 11 } 12 while (letf < right && nums[right] % 2 == 0) { 13 right--; 14 } 15 if (letf < right) { 16 int temp = nums[letf]; 17 nums[letf] = nums[right]; 18 nums[right] = temp; 19 } 20 } 21 return nums; 22 }
原文:https://www.cnblogs.com/0error0warning/p/13451229.html