左奇右偶
题目描述: 现有一个长度为10的整数数组{26,67,49,38,52,66,7,71,56,87}。现在需要对元素重新排列,使得所有的奇数保存到数组左边,所有的偶数保存到数组右边。
开发提示:
- 左边的偶数与右边的奇数换位置:
- 定义两个变量left和right,从左边开始查找偶数的位置,找到后用left记录,从右边开始找奇数的位置,找到后用right记录,如果left<right,那么就交换,然后在上一次的基础上继续查找,直到left与right擦肩。
// {26,67,49,38,52,66,7,71,56,87} 目标 左奇右偶
int[] nums = {26,67,49,38,52,66,7,71,56,87};
for (int left = 0, right = nums.length - 1; left < right; ){
// left代表左边需要交换数的下标
while (nums[left] % 2 != 0) left++;
while (nums[right] % 2 ==0) right--;
if (left < right) {
int tmp = nums[left];
nums[left] = nums[right];
nums[right] = tmp;
}
}
System.out.println(Arrays.toString(nums)); // [87, 67, 49, 71, 7, 66, 52, 38, 56, 26]
查看18道真题和解析