[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Posted Spring-_-Bear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面相关的知识,希望对你有一定的参考价值。
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
题解一:
/**
* 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
*
* @param nums 数组
* @return 调整后的数组
*/
public int[] exchange(int[] nums)
/*
* 首尾指针法:首指针由前向后寻找偶数,尾指针由后向前寻找奇数,
* 两指针都找到则交换其值,直至两指针相遇
*/
int head = 0;
int tail = nums.length - 1;
while (head < tail)
while (head < tail && nums[head] % 2 != 0)
head++;
while (head < tail && nums[tail] % 2 == 0)
tail--;
int tmp = nums[head];
nums[head] = nums[tail];
nums[tail] = tmp;
return nums;
题解二:
/**
* 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
*
* @param nums 数组
* @return 调整后的数组
*/
public int[] exchange(int[] nums)
/*
* 首尾指针法:首指针由前向后寻找偶数,尾指针由后向前寻找奇数,
* 两指针都找到则交换其值,直至两指针相遇
*/
int head = 0;
int tail = nums.length - 1;
while (head < tail)
// 优化:利用位运算中的与运算 & 1,也能达到判断奇偶性的效果
// & 运算:相同为 1, 不同为 0
while (head < tail && (nums[head] & 1) == 1)
head++;
while (head < tail && (nums[tail] & 1) == 0)
tail--;
int tmp = nums[head];
nums[head] = nums[tail];
nums[tail] = tmp;
return nums;
以上是关于[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面的主要内容,如果未能解决你的问题,请参考以下文章
[LeetCode]剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
Leetcode刷题Python剑指 Offer 21. 调整数组顺序使奇数位于偶数前面