C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面
题目: 调整数组顺序使奇数位于偶数前面
- 热度指数:11843 时间限制:1秒 空间限制:32768K
- 本题知识点: 数组
题目描述
输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
分析:
不考虑空间损耗, 可以考虑使用odd和even两个vector分别存放基数和偶数, 然后使用copy函数将odd向量的内容和even向量的内容依次填入原array数组即可. 其中有个小技巧: 使用按位与&判断奇偶性比%运算更快一些…
已AC代码:
#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
class Solution {
public:
bool isOdd(int x)
{
// if(x % 2 == 1)
if((x & 1) != 0) // 位运算&的优先级不高,低于关系运算符,需要加括号
return true;
return false;
}
void reOrderArray(vector<int> &array) {
vector<int> odd;
vector<int> even;
int len=array.size();
for(int i=0; i != len; i++)
{
if(isOdd(array[i])) odd.push_back(array[i]);
else even.push_back(array[i]);
}
int len1 = odd.size();
array.clear();
array.resize(len);
copy(odd.begin(), odd.end(), array.begin());
copy(even.begin(), even.end(), array.begin()+len1);
}
};
// 以下为测试
int main()
{
Solution sol;
int arr[] = {1,2,3,4,5,6};
vector<int> vect(arr, arr+6);
sol.reOrderArray(vect);
for(auto i: vect)
cout<<i;
return 0;
}
C++版 - 剑指offer面试题14: 调整数组顺序使奇数位于偶数前面的更多相关文章
- 剑指Offer:面试题14——调整数组顺序使奇数位于偶数前面(java实现)
问题描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分. 思路: 1.最简单的想法,不考虑时间复杂度,扫描数组,遇到偶数,先取出这 ...
- 剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面
剑指Offer - 九度1516 - 调整数组顺序使奇数位于偶数前面2013-11-30 02:17 题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部 ...
- 剑指offer(13)调整数组顺序使奇数位于偶数前面
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 题目分析 判断是 ...
- 【剑指offer】Q14:调整数组顺序使奇数位于偶数前面
def isOdd(n): return n & 1 def Reorder(data, cf = isOdd): odd = 0 even = len( data ) - 1 while T ...
- 【剑指Offer】13、调整数组顺序使奇数位于偶数前面
题目描述: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思 ...
- 剑指offer编程题Java实现——面试题14调整数组顺序使奇数位于偶数之前
题目: 输入一个整数数组,实现一个函数来调整该数组中数组的顺序,使得所有的奇数位于数组的前半部分,偶数位于数组的后半部分. 解题思路:数组中维护两个指针,第一个指针初始化时候指向数组头部,第二个指针初 ...
- 牛客网剑指offer第13题——调整数组顺序使得奇数位于偶数前面
题目来源:剑指offer 题目: 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变 ...
- 《剑指offer》面试题14 调整数组顺序使奇数位于偶数前面 Java版
(输入整数数组,使所有奇数位于前半部分,所有偶数位于后半部分.) 我的方法:想到用两个下标分别表示奇数和偶数的界线,一个在开头,一个在末尾,判断每一个数字的类别,然后将它放入对应的范围内,移动下标,直 ...
- 剑指offer-面试题14.调整数组顺序使奇数位于偶数的前面
题目:输入一个整数数组,实现一个函数来调整该数组中的数字的顺序, 使得所有的奇数位于数组的前半部门,所有的偶数位于数组的后半部门. 这一题一看其实是很简单的,当然在不考虑效率的情况可以这样考虑 我们将 ...
随机推荐
- mysql查询出近一周,三个月,一年的数据
SELECT * FROM 表名 WHERE 时间字段>DATE_SUB(CURDATE(), INTERVAL YEAR) 一年 SELECT * FROM 表名 WHERE 时间字段> ...
- 【Java并发编程一】线程安全问题
1.多线程的实现 多线程有两种实现方式: 1.1.继承Thread类 =>示例:A a=new A(); a.start(); 1.2.实现Runnable接口 =>示例:A a=ne ...
- leetcode刷题正则表达式
题目链接:https://leetcode-cn.com/problems/regular-expression-matching/ 这道题用到了动态规划: 关于动态规划请参考这篇博文:https:/ ...
- 起泡排序(Bubble sort)
局部有序和整体有序 在由一组整数组成的序列A[0, n-1]中,满足 $ A[i - 1] \leq A[i] $ 的相邻元素称为顺序的:否则是逆序的. 扫描交换 由有序序列的特征,我们可以通过不断改 ...
- 爬虫之scrapy-redis
redis分布式部署 scrapy框架是否可以自己实现分布式? 不可以原因有两点 其一:因为多台机器上部署的scrapy会各自拥有各自的调度器,这样就使得多台机器无法分配start_urls列表中的u ...
- git 提交代码到库
今天用git commit -m “注释”提交的时候,注释写错了,于是各种查资料开始了和git bash vim的纠缠...(网上的资料我真是没操作成功,不过最后还是摸索出来了) 首先 使用 git ...
- esxi 精简置备只增不减问题解决方法(转)
esxi 精简置备只增不减问题解决方法 众所周知Thin Provisioning模式下的虚拟机磁盘的空间会随需增长,可以很大程度上帮助我们节约空间,可是,凡增长过后的空间,即使清除了导致增长的文件后 ...
- c# 集合的长度为什么是可变的
摘要: 写在前面:此随笔仅仅是作为个人学习总结,有不对的地方,请各位前辈指正O(∩_∩)O........ 一: 引入 在学习集合之前我们都学习过数组.可以知道数组的长度在声明的时候就已经被固定了,不 ...
- 异步使用委托delegate --- BeginInvoke和EndInvoke方法
当我们定义一个委托的时候,一般语言运行时会自动帮委托定义BeginInvoke 和 EndInvoke两个方法,这两个方法的作用是可以异步调用委托. 方法BeginInvoke有两个参数: Async ...
- protobuf是什么?
ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台.跨语言.可扩展特性,类型于常用的XML及JSON,但具有更小的传 ...