这个是我碰到的一个面试题。
题目完整的是这样
写一个函数,找出数组中第K大小的数,输出数所在的位置。例如{2,4,3,4,7},第1大的数是7,位置在4。第2大,第3大的数是4,位置在1,3,则返回1和3都可以。
SO,第一反应是TOP K问题。
TOP K用 快排或者堆都可以做到。(之后再写一个文章记录记录这个吧~)
但是,数组本来的位置就会被改变了。
于是乎,作为一个只会用C++的渣渣,就首先想到STL里的MAP的。
map 的结构有 <key,value>
map是自带去重,和自带对KEY排序的。
那么数组中的值当做key,下标当做value,插入map中。
即可对数组中的值去重并排序,逆序遍历map中的第K个元素,输出其value,即为数组中第K大小的数所在位置了。
是不是这个道理?
OK,先洗衣服,回来实现程序。
============================第二日=======================