剑指 Offer 21. 调整数组顺序使奇数位于偶数前面
遇到题目就开始想能不能使用暴力求解,我真的太暴力了。。。
本题看了别人的求解思路:
利用两个指针,一个从数组头部开始,一个从数组尾部开始。
- 如果前面的指针指向的奇数,那么指针的指向向后移动。
- 如果后面的指针指向的是偶数,后面的指针向前移动。
- 否则交换两个指针所指向的数字的位置。
class Solution {
//从头遍历到尾部,如果前面的是基数与尾部的交换
public int[] exchange(int[] nums) {
int left=0;
int right=nums.length-1;
while(left<right){ //这一行本来写的是left!=right,报错不符合条件的
if(nums[left]%2==1&&left<right){
//注意这里的边界条件
left=left+1;
}
if(nums[right]%2==0&&left<right){
right=right-1;
}
int temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
}
return nums;
}
}