笔试题2-数组
2015-10-09 15:16
441 查看
例题1:
/*
* 这道题题目是,在一个数组中,只有两个数字出现过一次,其他所有的数字都在数组中出现过一次,找出这两个数。
* 分析: 用异或思想解决,因为除去两个特殊的数字外,其他所有数字都出现过两次,这些数字异或的结果为0。
*/
#include<iostream>
using namespace std;
void main()
{
int a[] = {2, 6, 3, 2, 7,6,8,7};
int xXory = 0;
int len=sizeof(a)/sizeof(a[0]);
for(int i =0; i<len; i++)
{
xXory ^=a[i];
} //循环结束后,xXory的值是x,y这两个不相同的数留下来的。
int mask=1;
//for(;(xXory&mask)==0; mask<<=1);
//由于xXory是x,y异或的结果,因此,用mask找到不同位,将其分为两拨,这样就可以找到x,y了。
while((xXory&mask)==0)
{
mask<<=1;
}
int x=0,y=0;
for(int i=0; i<len; i++)
{
if(a[i]&mask)
{
x^=a[i];
}
else{
y^=a[i];
}
}
cout<<x<<" "<<y<<endl;
}
例题2:
众数问题:
/*
* 众数问题,在数组中超过一半的数
* 分析: 去掉两个不同的数,众数不变;
*/
#include<iostream>
using namespace std;
void main()
{
int a[]= {6,2,2,2,4,2,2,5,6,4,3,2,2};
int count=0,x;
int len=sizeof(a)/sizeof(a[0]);
for(int i=0; i<len; i++)
{
if(count==0)
{
x=a[i];
count=1;
}
else if(x==a[i])
{
count++;
}
else
{
count--;
}
}
cout<<x<<endl;
}
/*
* 这道题题目是,在一个数组中,只有两个数字出现过一次,其他所有的数字都在数组中出现过一次,找出这两个数。
* 分析: 用异或思想解决,因为除去两个特殊的数字外,其他所有数字都出现过两次,这些数字异或的结果为0。
*/
#include<iostream>
using namespace std;
void main()
{
int a[] = {2, 6, 3, 2, 7,6,8,7};
int xXory = 0;
int len=sizeof(a)/sizeof(a[0]);
for(int i =0; i<len; i++)
{
xXory ^=a[i];
} //循环结束后,xXory的值是x,y这两个不相同的数留下来的。
int mask=1;
//for(;(xXory&mask)==0; mask<<=1);
//由于xXory是x,y异或的结果,因此,用mask找到不同位,将其分为两拨,这样就可以找到x,y了。
while((xXory&mask)==0)
{
mask<<=1;
}
int x=0,y=0;
for(int i=0; i<len; i++)
{
if(a[i]&mask)
{
x^=a[i];
}
else{
y^=a[i];
}
}
cout<<x<<" "<<y<<endl;
}
例题2:
众数问题:
/*
* 众数问题,在数组中超过一半的数
* 分析: 去掉两个不同的数,众数不变;
*/
#include<iostream>
using namespace std;
void main()
{
int a[]= {6,2,2,2,4,2,2,5,6,4,3,2,2};
int count=0,x;
int len=sizeof(a)/sizeof(a[0]);
for(int i=0; i<len; i++)
{
if(count==0)
{
x=a[i];
count=1;
}
else if(x==a[i])
{
count++;
}
else
{
count--;
}
}
cout<<x<<endl;
}
相关文章推荐
- Matlab快速入门
- matlab中的strcmp函数
- Session集中式管理
- Swift实战-QQ在线音乐(AppleWatch版)
- C++静态库与动态库深入研究
- HTTP状态码
- 【微信转发,学院送礼】动动手指,分享课程,轻松领大奖~
- 课下参考八--Linux安装 详解(二)基本常识
- ubuntu 12.04忘记密码解决办法
- Error:No such property: GROUP for class: org.gradle.api.publication.maven.internal.deployer.DefaultG
- OO:XmlParser 网页分析和 爬虫
- java处理浮点类型的加减乘除法出现小数点精度错乱的解决方法
- HDU 5115 Dire Wolf
- 问题解决关于敏捷开发
- 多按钮同时按下的处理
- Java__子类中调用父类重写的方法。
- Android Eclipse 代码混淆
- Linux学习笔记之<Shell编程初入门>
- 判断下拉列表框里的值是否与某个值相等时,默认为选中状态
- PhotoShop中显示当前PS信息的脚本