1. 题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
2. 示例
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
3. 题解
双指针法:
- 判断是否符合左边奇数右边偶数
- 完全相反,交换
- 左右都为偶数,右指针左移
- 左右都为奇数,左指针左移
- 左奇数右偶数,左指针右移,右指针左移
4. 实现
1 public class Exchange21 {
2 // 双指针
3 public int[] exchange(int[] nums) {
4 int left = 0, right = nums.length - 1;
5 while (left < right) {
6 // 左边为偶数,右边为基数交换
7 if(nums[left] % 2 == 0 && nums[right] % 2 == 1) {
8 int temp = nums[left];
9 nums[left] = nums[right];
10 nums[right] =temp;
11 }
12 // 左边为偶数,右边为偶数
13 else if(nums[left] % 2 == 0) {
14 right--;
15 }
16 // 左边为奇数,右边为偶数
17 else if(nums[right] % 2 == 1) {
18 left++;
19 }
20 // 左边为奇数,右边为偶数
21 else {
22 left++;
23 right--;
24 }
25 }
26 return nums;
27 }
28
29 public static void main(String[] args) {
30 int[] nums = {1, 2, 3, 4};
31 int[] num = new Exchange21().exchange(nums);
32 for(int i = 0; i < num.length; i++) {
33 System.out.println(num[i]);
34 }
35 }
36 }
5. 结语
努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!
如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。