题目描述:
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。
示例:
输入:nums = [1,2,3,4]
输出:[1,3,2,4]
注:[3,1,2,4] 也是正确的答案之一。
提示:
0 <= nums.length <= 50000
1 <= nums[i] <= 10000
代码:
最近水题比较多,懒得写博客。
package com.lzw.jianzhi_Offer1;
/**
* @author puppet
* @create 2021-06-18-16:02
*/
public class jianzhi_Offer_21 {
//双指针,快排思想,一个指针l用来从数组的最左端找偶数,一个指针r用来从数组的最右端找奇数
//时间复杂度O(n^2)
public int[] exchange(int[] nums) {
int l = 0, r = nums.length - 1;
while (l < r){
//从左端开始找偶数
while (l < r && (nums[l]&1)==1){
l++;
}
//从右端开始找奇数
while (r > 0 && (nums[r]&1)==0){
r--;
}
//左右都找到了要找的数,如果l<r则交换两个数
if (l < r){
int tmp = nums[l];
nums[l] = nums[r];
nums[r] = tmp;
}
}
return nums;
}
public static void main(String[] args) {
jianzhi_Offer_21 obj = new jianzhi_Offer_21();
int[] nums = obj.exchange(new int[]{1, 2, 3, 4});
for (int num : nums){
System.out.println(num);
}
}
}

本文介绍了一个使用双指针快速实现数组中奇数和偶数分离的方法。通过从两端向中间逼近的方式,确保所有奇数位于数组前半部分,偶数位于后半部分。这种方法简单高效,适用于多种编程场景。
2047

被折叠的 条评论
为什么被折叠?



