2012-9-26 金山WPS笔试题

今晚的笔试题目不难,所考算法也不是很难,关键在仔细审题和平常的积累……

1. 有770个节点的完全二叉树,问叶子节点有多少?(重点是叶子节点,不是最下一层的节点数目,陷阱呀)

可以计算得出该完全二叉树的最下面一层的节点数目是259,上一层的节点数目为256,所以,可以得出上一层的叶子节点数目有126,所以结果为385


2. 已知数组a[100][65]是以行序排列,现已知其起始地址为10000,每个元素占两个字节,求a[56][22]的起始地址?(行序为陷阱)

其实这里不说行序反而没有问题,10000+(56×65 + 22 )× 2 = 17324


3. 一无序数组a,有n个元素,现问将其构造成最大堆的时间复杂度是多少(O(n))


4. (he) ^ 2 = she , 问s、h、e的值分别是什么?其实这题很容易就能想到25,25^2 = 625, 所以s的值为6, h为2, e为5


5. 有一个数组,数组里面有n多整数,现要求实现一个程序将数组中的每一个数的数值变为不包括该数的其他数的乘积。假设不会溢出,要求算法的时间复杂度和空间复杂度越低越好!

void cal(int * input, int n)
{
int tempSum = 1;
for(int i = 0; i < n; i++)
tempSum *= input[i];
for(int i = 0; i < n; i++)
input[i] = tempSum / input[i];
}

6. 有一数组,数组里面有n个整数,现已知数组中有三个数只有一个,其他的数都有两个,实现一个程序输出3个数中的任意一个,要求算法时间复杂度和空间复杂度越低越好?(一个比较差的实现,好的没想出来)

(室友想出来的思路:采用类似于快速排序的方法,在数组中任选一元素V作为支点,将大于V的元祖放在该元素的右边,小于该元素的元祖放在该元素的左边;如果左右两边的元素数目都为偶数,则表明该支点元素V就是3个唯一元素中的一个;若一边为奇数个,一边为偶数个,则选取奇数个那边递归使用上述算法即可,该算法的时间复杂度O(nlogn))

void fun(int * a, int n)
{
int i=0, j =0;
for(i = 0; i < n; i++)
{
bool second = false;
for(j = 0; j < n; j++)
{
if(a[i] == a[j]  && i != j)
{
second  = true;
break; 
}
}
if(second == false)
{
cout<<a[i]<<endl;
break;
}
}
}

6.典型的并查集问题(可惜当时没想出来具体的实现)



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值