调整数组顺序使奇数位于偶数前面
个人博客
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
题解
-
快慢指针
- 时间复杂度 O(n) 空间复杂度 O(1)
- 在数组开头设置一个指针,末尾设置一个指针。
- 当前指针指向的元素是奇数,则向后移动,直到指向元素是偶数(前指针在尾指正前)
- 当尾指针指向的元素是偶数,则向前移动,直到指向元素是奇数(前指针在尾指正前)
class Solution { public int[] exchange(int[] nums) { int front = 0; int behind = nums.length - 1; while(front<behind){ while((nums[front]&1) == 1 && front < behind){ front++; } while((nums[behind]&1) == 0 && behind > front){ behind--; } if(front < behind){ int temp = nums[front]; nums[front] = nums[behind]; nums[behind] = temp; } } return nums; } }
总结
-
可以用位运算优化取模
-
需要判断元素指向的位置,防止数组越界