题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
JAVA
双指针
class Solution {
//双指针, 从前至后一个,从后至前一个
public int[] exchange(int[] nums) {
int front=0;
int back=nums.length-1;
while(front<back){
while(front<back && nums[front]%2!=0)
front++;
while (front<back && nums[back]%2==0)
back--;
if(front<back){
int temp=nums[front];
nums[front]=nums[back];
nums[back]=temp;
}
}
return nums;
}
}
再加个要求: 要求保持稳定,即数字间的前后顺序不变
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
//如果不保证顺序就可以用双指针了, 这里类似于排序是否稳定,已知插入排序是稳定的
//所以用插入排序, 前边奇数区为有序区,挨个遍历后续数组
public int[] reOrderArray (int[] array) {
// write code here
if(array==null&&array.length==0) return array;
int pre=0;//上一个奇数出现的未知
int temp=0;
for(int i=0;i<array.length;i++){
temp=array[i];
if(array[i]%2==0)
continue;
int k=i;
while(k>pre){
array[k]=array[k-1];
k--;
}
array[k]=temp;
pre++;
}
return array;
}
}
试试双指针,但是需要浪费点空间
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @return int整型一维数组
*/
//双指针
public int[] reOrderArray (int[] array) {
// write code here
int []array1=new int[array.length];
int l=0;
int r=array.length-1;
int index_l=l;
int index_r=r;
while(l<array.length && r>=0)
{
if(array[l]%2==1){
array1[index_l++]=array[l];
}
l++;
if(array[r]%2==0){
array1[index_r--]=array[r];
}
r--;
}
return array1;
}
}