剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
easy
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
1
2
3
| 输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
|
相当标准的双指针题目
快慢指针
1
2
3
4
5
6
7
8
9
10
11
12
13
| func exchange(nums []int) []int {
// slow 始终在第一个偶数上,fast 往前探索找奇数
slow, fast := 0, 0
for fast < len(nums) {
if nums[fast]%2 == 1 {
// 是奇数
nums[slow], nums[fast] = nums[fast], nums[slow]
slow++
}
fast++
}
return nums
}
|
头尾指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| func exchange(nums []int) []int {
low, high := 0, len(nums)-1
for low <= high {
for low < len(nums) && nums[low]%2 == 1 {
// low 往前走 直到遇到偶数
low++
}
for high >= 0 && nums[high]%2 == 0 {
// high 往后退 直到遇到奇数
high--
}
if low < high {
nums[low], nums[high] = nums[high], nums[low]
}
}
return nums
}
|