题意:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。
解题思路
解法1:--linkedlist方法,超时
1.最直接想到的做法是,使用linkedlist数据结构,遇到偶数addLast,遇到奇数addFirst
2.然后遍历list,构造结果数组
解法2:--双指针方法
1.声明两个指针,一个指向头,一个指向尾
2.while (i < j)
开始循环,i指针从头开始寻找,找到第一个偶数;j指针从尾开始寻找,找到第一个奇数,然后交换每次遍历得到的奇数和偶数
解题遇到的问题
无
后续需要总结学习的知识点
无
##解法1--超时
import java.util.LinkedList;
class Solution {
public int[] exchange(int[] nums) {
LinkedList<Integer> linkedList = new LinkedList<Integer>();
for (int i = 0; i < nums.length; i++) {
if (nums[i] % 2 == 0) {
linkedList.addLast(nums[i]);
} else {
linkedList.addFirst(nums[i]);
}
}
int[] ans = new int[linkedList.size()];
for (int i = 0; i < ans.length; i++) {
ans[i] = linkedList.get(i);
}
return ans;
}
}
##解法2
class Solution {
public int[] exchange(int[] nums) {
// 声明两个指针,一个指向头,一个指向尾
int i = 0, j = nums.length - 1;
while (i < j) {
// 从头开始寻找,找到第一个偶数
while (nums[i] % 2 != 0 && i < j) {
i++;
}
// 从尾开始寻找,找到第一个奇数
while (nums[j] % 2 == 0 && i < j) {
j--;
}
// 交换每次遍历得到的奇数和偶数
if (i < j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
return nums;
}
}
网友评论