剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例 :
输入: nums = [1,2,3,4]
输出: [1,3,2,4]
注: [3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 500000 <= nums[i] <= 10000
指针
思路 我们用一个指针来记录奇数的最后位置的下一位
-
范围区间:
-
[0,index) 为奇数
-
[index,len-1] 为偶数
-
实现:
遍历整个数组nums
- 判断每个元素是否为奇数isOdd
- 是奇数,只需要将当前第i个值和index进行交换,然后index++
- 不是奇数无需处理 处理完毕则满足题意
function swap(nums, l, r) {
[nums[l], nums[r]] = [nums[r], nums[l]]
}
function isOdd(num) {
return num % 2 !== 0
}
var exchange = function (nums) {
// 思路用指针index记录奇数的最后位置的下一位
// [0,index) 为奇数
// [index,len-1] 为偶数
var index = 0
for (var i = 0; i < nums.length; i++) {
var item = nums[i]
if(isOdd(item)){
swap(nums,index,i)
index++
}
}
return nums
};