第 13 日:调整数组顺序使奇数位于偶数前面
题目链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof/
题目
解题
-
双指针
解题思路:
定义左右指针,左指针遇到偶数停下来,右指针遇到奇数停下来,然后进行交换,然后重返往复,直到两个指针相遇停止详细代码如下:
class Solution {
public int[] exchange(int[] nums) {
int left=0,right=nums.length-1;
int temp=0;
while(left<right){
//left找偶数
while(left<right&&nums[left]%2!=0){
left++;
}
//right找奇数
while(left<right&&nums[right]%2==0){
right--;
}
//溢出判断
if(left>=right) break;
//交换
temp=nums[left];
nums[left]=nums[right];
nums[right]=temp;
//移动
left++;
right--;
}
return nums;
}
}
-
双指针+新数组
解题思路:
创建一个新的数组,遍历原来所给定的数组,如果遇到奇数,按顺序放在前面,如果是偶数则放在后面。详细代码如下:
class Solution {
public int[] exchange(int[] nums) {
int[] arr=new int[nums.length];
int l=0,r=arr.length-1;
for(int i=0;i<nums.length;i++){
if(nums[i]%2==0){
arr[r]=nums[i];
r--;
}else{
arr[l]=nums[i];
l++;
}
}
return arr;
}
}