每日一练

每日一练(11):调整数组顺序使奇数位于偶数前面

2022-01-24  本文已影响0人  加班猿

title: 每日一练(11):调整数组顺序使奇数位于偶数前面

categories:[剑指offer]

tags:[每日一练]

date: 2022/01/24


每日一练(11):调整数组顺序使奇数位于偶数前面

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

示例:

输入:nums = [1,2,3,4]

输出:[1,3,2,4]

注:[3,1,2,4] 也是正确的答案之一。

提示:

0 <= nums.length <= 50000

0 <= nums[i] <= 10000

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/diao-zheng-shu-zu-shun-xu-shi-qi-shu-wei-yu-ou-shu-qian-mian-lcof

方法一:有手就行

建立容器,第一次循环放入奇数,第二次循环放入偶数 .

vector<int> exchange(vector<int>& nums) {
    vector<int>res;
    for (int i = 0; i < nums.size(); i++) {
        if ((nums[i] & 1) != 0) {   //nums[i] & 1) != 0 可用 nums[i] % 2 替代
            res.push_back(nums[i]); //放入奇数
        } 
    }
    for (int i = 0; i < nums.size(); i++) {
        if ((nums[i] & 1) != 1) {   //nums[i] & 1) != 1 可用 (nums[i] % 2) == 0 替代
            res.push_back(nums[i]); //放入偶数
        } 
    }
    return res;
}

方法二:首尾双指针

vector<int> exchange(vector<int>& nums) {
    int left = 0, right = nums.size() - 1;
    while (left < right) {
        if ((nums[left] & 1) != 0) {    //如果为偶数
            left++;
            continue;
        }
        if ((nums[right] & 1) != 1) {   //如果为奇数
            right--;
            continue;
        }
        swap(nums[left++], nums[right--]);  //交换值
    }
    return nums;
}

方法三:快慢双指针

vector<int> exchange(vector<int>& nums) {
    int slow = 0, fast = 0;
    while (fast < nums.size()) {
        if ((nums[fast]) & 1) { //奇数
            swap(nums[slow], nums[fast]);//交换
            slow++;
        }
        fast++;
    }
    return nums;
}
上一篇 下一篇

猜你喜欢

热点阅读