700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素

腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素

时间:2020-02-17 09:27:43

相关推荐

腾讯内部转岗面试题3——找出数组中比左边大比右边的小的元素

题目:

以时间复杂度 O(n) 从长度为 n 的数组中找出同时满足下面两个条件的所有元素:

(1)该元素比放在它前面的所有元素都大;

(2)该元素比放在它后面的所有元素都小。

分析:

面试官给的上面冗余的描述,其实一句话即可说明,即以时间复杂度 O(n) 从长度为n的数组中找出所有比左边大比右边的小的元素

一开始求出所有元素右边最小数,存放到一个数组 rightMin 中,然后从左往右判断当前元素是否大于左边所有元素,如果是则和其右边最小数(存放于最小数组 rightMin)比较,如果小于,则找到了满足条件的元素。

注意: 左右两边第一个数不满足条件。

实现:

#include <iostream>using namespace std;void printPivotElements(int data[], int len) {// 从右往左,寻找每个位置及其之后的最小数int* rightMin = new int[len];int rMin = data[len - 1];for (int i = len - 1; i >= 0; --i) {if (data[i]<rMin) rMin = data[i];rightMin[i] = rMin;}// 从左往右,寻找比左边大且比右边小的数int max = data[0];for (int i = 1; i < len - 1; ++i) {if (data[i] > max) {max = data[i];if (data[i] < rightMin[i+1]) cout << data[i] << endl;}}}int main() {int iTestArray[] = { 1,8,6,9,10,15,12,20 };printPivotElements(iTestArray, sizeof(iTestArray) / sizeof(iTestArray[0]));}

输出:

910

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。