42. 微软面试题:调整数组顺序使奇数位于偶数前面(数组)
2014-05-15 20:19
155 查看
题目:
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
分析:
只需要设置头尾两个指针遍历就可以了,前面遇到偶数记下来,后面遇到奇数记下来,交换,知道后面的指针小于前面的指针。
实现如下:
编译:
g++ test.cpp -o test
执行:
./test
运行结果为:(输入是:1,2,3,4,5,6,7,8,9,10)
1,9,3,7,5,6,4,8,2,10,
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。要求时间复杂度为O(n)。
分析:
只需要设置头尾两个指针遍历就可以了,前面遇到偶数记下来,后面遇到奇数记下来,交换,知道后面的指针小于前面的指针。
实现如下:
#include<iostream> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<vector> using namespace std; void dodata(int* rd, const int num) { if(num <= 0) return; int ieven = num-1, iodd = 0; while(ieven > iodd) { if(rd[iodd] %2 == 1) { iodd ++; continue; } if(rd[ieven]%2 == 0) { ieven --; continue; } int t = rd[iodd]; rd[iodd] = rd[ieven]; rd[ieven] = t; iodd ++; ieven --; } } int main() { int inter[10] = {1,2,3,4,5,6,7,8,9,10}; dodata(inter, 10); int i = 0; while(i < 10) { cout << inter[i++] << ","; } cout << endl; return 0; }
编译:
g++ test.cpp -o test
执行:
./test
运行结果为:(输入是:1,2,3,4,5,6,7,8,9,10)
1,9,3,7,5,6,4,8,2,10,
相关文章推荐
- 微软,Google面试题 (29) —— 调整数组顺序使奇数位于偶数前面
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面[算法]
- 【剑指offer】面试题14、调整数组顺序使奇数位于偶数前面
- 程序员面试题100题第29题——调整数组顺序使奇数位于偶数前面
- 【面试题十四】调整数组顺序使奇数位于偶数前面
- 【面试题014】调整数组顺序使奇数位于偶数前面
- 微软100题(54)调整数组顺序使奇数位于偶数前面
- 【剑指offer 面试题14】调整数组顺序使奇数位于偶数前面
- 《剑指Offer》面试题14:调整数组顺序使奇数位于偶数前面
- 我们爱面试,一面一学-----微软谷歌面试100题--【54】调整数组顺序使奇数位于偶数前面
- 程序员面试题精选100题(29)-调整数组顺序使奇数位于偶数前面
- 调整数组顺序使奇数位于偶数前面 【微软面试100题 第五十四题】
- 调整数组顺序使奇数位于偶数前面 【微软面试100题 第五十四题】
- 剑指offer 面试题14—调整数组顺序使奇数位于偶数前面
- 《剑指Offer》读书笔记---面试题14:调整数组顺序使奇数位于偶数前面
- 剑指offer 面试题14 调整数组顺序使奇数位于偶数前面
- 面试题14 调整数组顺序使奇数位于偶数前面
- [剑指offer][面试题14]调整数组顺序使奇数位于偶数前面
- 【剑指Offer学习】【面试题14 :调整数组顺序使奇数位于偶数前面】
- 《剑指Offer》学习笔记--面试题14:调整数组顺序使奇数位于偶数前面