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

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

题目

题目链接

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

示例:

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

解题

方法一:双指针

原地修改

注意(nums[left]&1)==1 要加括号, 因为 == 的优先级比&更高

nums[left]&1等价于nums[left]%2,但是通常情况下位运算更加快一点

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int left=0,right=nums.size()-1;
        while(left<right){
            while(left<right&&(nums[left]&1)==1) left++;
            while(left<right&&(nums[right]&1)==0) right--;
            swap(nums[left],nums[right]);
        }
        return nums;
    }
};

方法二:(i)

class Solution {
public:
    vector<int> exchange(vector<int>& nums) {
        int n=nums.size();
        vector<int> res(n);
        int left=0,right=n-1;
        for(int i=0;i<n;i++){
            if(nums[i]%2==1){
                res[left]=nums[i];
                left++;
            }
            else{
                res[right]=nums[i];
                right--;
            }
        }
        return res;
    }
};
相关文章
|
10月前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!
|
弹性计算 资源调度 Kubernetes
Flink三种集群模式,Standalone模式,Flink On YARN,Flink On K8S,这三种模式有啥优缺点,生产环境如何选择呢?
Flink三种集群模式,Standalone模式,Flink On YARN,Flink On K8S,这三种模式有啥优缺点,生产环境如何选择呢?
1705 3
|
11月前
|
小程序 UED 开发者
小程序的生命周期函数
小程序的生命周期函数
422 1
|
9月前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
515 5
|
10月前
|
弹性计算 固态存储 Linux
阿里云服务器、轻量应用服务器、gpu云服务器收费标准与实时活动价格参考
云服务器ECS、轻量应用服务器和gpu云服务器是阿里云的主要云服务器产品,目前轻量应用服务器2核2G收费标准为60元/月,活动价格只要36元/1年或68元1年,云服务器1核1G包月收费标准最低为24.0元/月,GPU云服务器中gn6i实例4核15G配置月付1681.00/1个月起,gn6v实例8核32G配置月付3817.00/1个月起。本文为大家整理汇总了阿里云服务器、轻量应用服务器、gpu云服务器的最新收费标准与活动价格情况,以表格形式展示给大家,以供参考。
|
11月前
|
API 数据库 Python
二、学习 Flask之二
二、学习 Flask之二
141 0
|
数据安全/隐私保护
硬盘坏道如何检测和修复?
本文介绍了硬盘坏道的概念,包括逻辑坏道和物理坏道的区别,并提供了使用DiskGenius检测和修复坏道的步骤。当硬盘出现坏道且包含重要数据时,应立即备份数据,使用数据恢复软件,或在严重情况下寻求专业帮助。保护和恢复数据是应对硬盘坏道的关键。
|
Go
golang力扣leetcode 691.贴纸拼词
golang力扣leetcode 691.贴纸拼词
92 0
|
JSON 小程序 前端开发
细说小程序底部标签---【浅入深出系列006】
细说小程序底部标签---【浅入深出系列006】
|
编译器 C语言
回调函数与位运算
在C语言中回调函数是函数指针的高级应用。所谓回调函数,一个笼统简单的介绍就是一个被作为参数传递的函数。从字面上看,回调函数的意思是:一个回去调用的函数,如何理解这句话呢?从逻辑上分析,要“回去”,必然存在着一个已知的目的地,然后在某一个时刻去访问;那么回调函数就是存在一个已知的函数体A,将这个函数体A的地址即函数名“A”(函数名即是这个函数体的函数指针,指向这个函数的地告知给另外某个函数B,当那个函数B执行到某一步的时候就会去执行函数A。
158 0
回调函数与位运算