【剑指offer】21 调整数组顺序使得奇数位于偶数之前(第一次遇到限制时间的题)

面试题21. 调整数组顺序使奇数位于偶数前面

难度简单16

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

 

示例:

输入:nums = [1,2,3,4]
输出:[1,3,2,4] 
注:[3,1,2,4] 也是正确的答案之一。

 

提示:

  1. 1 <= nums.length <= 50000
  2. 1 <= nums[i] <= 10000

第一次解题思路,list存储(时间超限),但是样例全部过

class Solution {
    public int[] exchange(int[] nums) {
        LinkedList<Integer> list = new LinkedList<>();
        LinkedList<Integer> list1 = new LinkedList<>();
        for(int i = 0;i<nums.length;i++){
            if(nums[i] % 2 == 0)
                list1.add(nums[i]);
            else 
                list.add(nums[i]);
        }
        list.addAll(list1);
        int [] array = new int[list.size()];
        for(int i = 0;i<list.size();i++){
            array[i] = list.get(i);
        }
        return array;
    }
}

后来,嗯,就是后来,快慢指针

class Solution {
    public int[] exchange(int[] nums) {
        int low = 0;
        int high = nums.length-1;
        while(low< high){
            if(low<high && nums[low] % 2!=0) low++;
            if(low<high && nums[high] % 2==0) high--;
            int temp = nums[low];
            nums[low] = nums[high];
            nums[high] = temp;
        }
        return nums;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章