百度最新面试题

16、找出第k大的数字所在的位置。写一段程序,找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。
答案:
   先找到第k大的数字,然后再遍历一遍数组找到它的位置。所以题目的难点在于如何最高效的找到第k大的数。
 我们可以通过快速排序,堆排序等高效的排序算法对数组进行排序,然后找到第k大的数字。这样总体复杂度为O(NlogN)。
 我们还可以通过二分的思想,找到第k大的数字,而不必对整个数组排序。从数组中随机选一个数t,通过让这个数和其它数比较,我们可以将整个数组分成了两部分并且满足,{x,xx,...,t}<{y,yy,...}。
 在将数组分成两个数组的过程中,我们还可以记录每个子数组的大小。这样我们就可以确定第k大的数字在哪个子数组中。
 然后我们继续对包含第k大数字的子数组进行同样的划分,直到找到第k大的数字为止。

 平均来说,由于每次划分都会使子数组缩小到原来1/2,所以整个过程的复杂度为O(N)。

21、平面内有11个点,由它们连成48条不同的直,由这些点可连成多少个三角形?
解析:
首先你要分析,平面中有11个点,如果这些点中任意三点都没有共线的,那么一共应该有C(11,2)=55,  可是,题目中说可以连接成48条直线,那么这11个点中必定有多点共线的情况。  55-48=7,从7来分析:
假设有一组三个点共线,那么可以组成的直线在55的基础上应该减去C(3,2)-1=2     2*3=6≠7,因此,可以断定不仅有三点共线的,也可能有四个点共线的可能。
假设有一组四个点共线,那么可以组成的直线在55的基础上应该减去C(4,2)-1=5
(备注,五个点共线的可能不存在,因为,C(5,2)-1=9>7,故不可能有五条直线共线。)

因此,三点共线少2条,4点共线少5条,只有一个4点共线,一个3点共线才能满足条件,其余情况不能满足少了7条直线。
那么,这11个点能组成的三角形的个数为,C(11,3)-C(3,3)-C(4,3)=165-1-4=160  (备注,三个点共线不能组成三角形)


来源 http://blog.csdn.net/hackbuteer1/article/details/7348968

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值