欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > C++面试(6)-----调整数组顺序使奇数位于偶数前面

C++面试(6)-----调整数组顺序使奇数位于偶数前面

2025/6/13 17:50:40 来源:https://blog.csdn.net/jndingxin/article/details/148608717  浏览:    关键词:C++面试(6)-----调整数组顺序使奇数位于偶数前面
  • 操作系统:ubuntu22.04
  • IDE:Visual Studio Code
  • 编程语言:C++11

题目描述

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

你可以返回任意满足条件的数组,但必须保证所有奇数在前、偶数在后。

示例:

输入: nums = [1,2,3,4,5]
输出: [1,3,5,2,4]  // 或者 [3,5,1,2,4] 等也都是合法输出

解题思路

我们可以使用双指针法来解决这个问题:

  • 定义两个指针 left 和 right:
    • left 从前往后找偶数;
    • right 从后往前找奇数;
  • 当找到一个偶数和一个奇数时,交换它们;
    直到 left >= right 为止。

这个方法可以做到原地排序,时间复杂度为 O(n),空间复杂度为 O(1)。

实现代码

#include <iostream>
#include <vector>class Solution
{public:std::vector<int> exchange(std::vector<int>& nums){int left = 0;int right = nums.size()-1;while(left < right){while(left<right && nums[left]%2 == 1){left++;}while(left<right && nums[right]%2 == 0){right--;}std::swap(nums[left],nums[right]);}return nums;}
};int main()
{std::vector<int> nums = {2,2,2,1};Solution s;s.exchange(nums); for(auto i : nums){std::cout << i << " ";}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词