剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

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. 结语

  努力去爱周围的每一个人,付出,不一定有收获,但是不付出就一定没有收获! 给街头卖艺的人零钱,不和深夜还在摆摊的小贩讨价还价。愿我的博客对你有所帮助(*^▽^*)(*^▽^*)!

  如果客官喜欢小生的园子,记得关注小生哟,小生会持续更新(#^.^#)(#^.^#)。

posted @ 2021-07-06 19:55  抚琴尘世客  阅读(44)  评论(0编辑  收藏  举报