sword_for_offer/docs/剑指 Offer 21. 调整数组顺序使奇数位于偶数前面.md
考虑定义双指针 $i$ , $j$ 分列数组左右两端,循环执行:
可始终保证: 指针 $i$ 左边都是奇数,指针 $j$ 右边都是偶数 。
{:width=450}
<,,,,,,,,,,,,>
$x & 1$ 位运算 等价于 $x % 2$ 取余运算,即皆可用于判断数字奇偶性。
class Solution:
def exchange(self, nums: List[int]) -> List[int]:
i, j = 0, len(nums) - 1
while i < j:
while i < j and nums[i] & 1 == 1: i += 1
while i < j and nums[j] & 1 == 0: j -= 1
nums[i], nums[j] = nums[j], nums[i]
return nums
class Solution {
public int[] exchange(int[] nums) {
int i = 0, j = nums.length - 1, tmp;
while(i < j) {
while(i < j && (nums[i] & 1) == 1) i++;
while(i < j && (nums[j] & 1) == 0) j--;
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
return nums;
}
}
class Solution {
public:
vector<int> exchange(vector<int>& nums)
{
int i = 0, j = nums.size() - 1;
while (i < j)
{
while(i < j && (nums[i] & 1) == 1) i++;
while(i < j && (nums[j] & 1) == 0) j--;
swap(nums[i], nums[j]);
}
return nums;
}
};