输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
如果修改原数组的话用双指针,交换数组两边的奇数和偶数。
如果是新建一个nums数组,那么还是双指针,只不过是把遍历到的奇数添加到左指针,遍历到的偶数添加到右指针。
class Solution { public int[] exchange(int[] nums) { int p1 = 0; int p2 = nums.length - 1; while (p1 < p2) { // 找到从左边开始第一个偶数 while (p1 < p2 && nums[p1] % 2 != 0) { p1 ++; } // 找到从右边开始第一个偶数 while (p2 > p1 && nums[p2] % 2 == 0) { p2 --; } // 将找到的偶数和奇数互换(如果p1 == p2,则相当于本身互换,还是不影响,但可以减少一次if判断。) int tem = nums[p1]; nums[p1] = nums[p2]; nums[p2] = tem; } // 此处修改了原数组。 return nums; } }
class Solution { public int[] exchange(int[] nums) { int p1 = 0; int p2 = nums.length - 1; int[] res = new int[nums.length]; for (int x : nums) { if (x % 2 == 0) { res[p2--] = x; } else { res[p1++] = x; } } return res; } }
标签:p2,偶数,p1,21,nums,int,Offer,---,数组 From: https://www.cnblogs.com/allWu/p/17277246.html