输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4] 注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
0 <= nums[i] <= 10000
最简单的思路就是创建两个数组,一个存奇数,一个存偶数,然后便利存入,在把奇数偶数两个数组,赋值到答案数组中,但是时间复杂度和空间复杂度都不行。
class Solution { public int[] exchange(int[] nums) { int j[] = new int[nums.length]; int o[] = new int[nums.length]; int anw[] = new int[nums.length]; int sj = 0, so = 0; for(int i = 0; i < nums.length; i++){ if(nums[i] % 2 == 1){ j[sj] = nums[i]; sj++; } if(nums[i] % 2 == 0){ o[so] = nums[i]; so++; } } for(int i = 0; i < sj; i++){ anw[i] = j[i]; } for(int i = 0 , l = sj; i < so; i++, l++){ anw[l] = o[i]; } return anw; } }
另一个思路是用快排到思想,头尾双指针。
class Solution { public int[] exchange(int[] nums) { int i = 0, j = nums.length - 1, tmp; while(i < j) { while(i < j && (nums[i] & 1) == 1) i++; while(i < j && (nums[j] & 1) == 0) j--; tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } return nums; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)