zoukankan      html  css  js  c++  java
  • 一道百度面试题

        给出一个整型数组num[],对其中的每个元素,输出在它左侧且比它小的最近元素,要求时间复杂度为O(n)。例如int num[]={2,4,1,3},2无左侧最近元素;4左侧最近的是2;1没有;3左侧最近的是1.

    分析:创建一个栈,然后将数组中的元素从右至左依次压入栈中。对每个元素,入栈前先检查栈顶元素是否比它大,若是的话,则该元素即为栈顶元素的左侧最近小元素,输出结果,栈顶弹出,再看此时的新栈顶是否还比当前元素大。直到栈顶元素不大于当前元素时,再将该元素压入栈中。
    当所有元素均压入栈时,栈中剩下的元素均不存在左侧最近小元素,将其结果输出。

    代码如下:

    //  [10/10/2013 qingezha]
    // 输出每个元素中,在它左侧且比它小的最近元素
    void PrintEachMin(int num[], int len)
    {
    	if(!num || len<=0)
    		return ;
    
    	stack<int> sta;
    
    	// 对每个元素,进栈前先循环判断栈顶是否比它大,若是则该元素就是栈顶的左侧最近小元素
    	// 此时输出结果后,弹出栈顶元素。最后将该元素压入栈
    	for (int i=len-1; i>=0; --i){
    		while(!sta.empty() && num[i]<sta.top()){
    			printf("The nearest number of %d is %d!
    ", sta.top(), num[i]);
    			sta.pop();
    		}
    		sta.push(num[i]);
    	}
    
    	// 此时栈中的所有元素均不存在左侧最近小元素
    	while(!sta.empty()){
    		printf("%d haven't nearest number!
    ", sta.top());
    		sta.pop();
    	}
    }


  • 相关阅读:
    PHP的几个常用加密函数
    sha1() 函数
    微信支付接口文档
    最强PostMan使用教程(1)
    用 Graphviz画神经网络图
    绘图工具graphviz学习使用
    maven添加oracle jdbc依赖
    httrack,webdup,WinHTTrack,WebZip
    过滤ASCII码中的不可见字符, ASCII三部分, 各控制字符详解, 去^@,^M
    报LinkageError的原因
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3364621.html
Copyright © 2011-2022 走看看