美文网首页
剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

作者: itbird01 | 来源:发表于2021-12-26 22:30 被阅读0次
题目.png

题意:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数在数组的前半部分,所有偶数在数组的后半部分。

解题思路

解法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;
    }
}

相关文章

网友评论

      本文标题:剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

      本文链接:https://www.haomeiwen.com/subject/ougqqrtx.html