调整数组顺序使奇数位于偶数前面
数组
题目
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
Related Topics
数组
双指针
排序
👍 311
👎 0
class Solution {
public int[] exchange(int[] nums) {
}
}
思路
- 新建一个数组,遍历原数组,
- 奇数从0开始添加,偶数,从尾开始添加
实现
class Solution {
public int[] exchange(int[] nums) {
int[] res = new int[nums.length];
int start=0;
int end =nums.length-1;
for (int i = 0; i<nums.length; i++){
if (nums[i]%2==0){
res[end]=nums[i];
end--;
continue;
}
res[start]=nums[i];
start++;
}
return res;
}
}
结果
解答成功:
执行耗时:2 ms,击败了42.62% 的Java用户
内存消耗:50.2 MB,击败了23.99% 的Java用户
思路
- 可以尝试交换
- 当碰到偶数的时候,与数组后面的奇数进行交换
交换
class Solution {
public int[] exchange(int[] nums) {
for (int i = 0; i<nums.length-1; i++){
if (nums[i]%2==0){
boolean flag =false;
for (int j=i+1;j<nums.length;j++){
if (nums[j]%2!=0){
flag = true;
int temp = nums[i];
nums[i]=nums[j];
nums[j]=temp;
break;
}
}
if (!flag){
break;
}
}
}
return nums;
}
}
结果
解答成功:
执行耗时:830 ms,击败了4.43% 的Java用户
内存消耗:50.4 MB,击败了11.23% 的Java用户
思路
- 两个for循环,能不能改成一个
- 尝试使用快慢双指针
优化2
class Solution {
public int[] exchange(int[] nums) {
int fast=0;
int slow=0;
int temp;
for (;fast<nums.length;fast++){
if (nums[fast]%2!=0){
temp = nums[fast];
nums[fast]=nums[slow];
nums[slow]=temp;
slow++;
}
}
return nums;
}
}
结果
解答成功:
执行耗时:1 ms,击败了100.00% 的Java用户
内存消耗:50.2 MB,击败了22.98% 的Java用户