美文网首页
剑指 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