网上搜的面经,有一道题,是这样的:原有一个有序数组,分成前后两部分,然后将这两部分交
换得到一个新的数组。写一个函数,参数是这个新的数组,要求找到数组分开的那
个结点,而且要考虑时间复杂度。
首先,由于数组原来是有序的,在这里假设为升序,那么即使两部分交换了后,两部分的数据仍然是升序的,设原来数组是前部分+后部分,交换后数组变成后部分+前部分,但是后部分的数的最小值仍然比前部分的最大值要大,因此,后部分的数据一定比前部分的数据大。
可以通过一次遍历数组的方式,找到分开的节点,如果数据一直升序下去,就一直遍历,直到找到第一个变小了的数即可。这样复杂度O(n)
但是也可以用二叉查找的方法,复杂度可以降为O(lgn),代码如下:
该程序返回后部分的最后一个数的位置