[leetCode]刷题记录:739. Daily Temperatures(C语言实现)

       之前在leetcode上刷题基本都用C++和STL来做。但是最近公司组织编程测试,要求用C语言来进行编程,奈何leetcode上C语言解法不算很多,正好趁此机会记录一下刷题的历程,并且完善一下C语言的解题过程。

      这道daily temperature,属于medium难度,想法不算很难,属于stack应用的一种。基本的想法如下:

     维护一个递减栈,递减栈内的元素是递减排列的,当遇到一个比栈顶元素大的值时就pop出栈顶元素,直到入栈元素比栈顶元素小,将该元素压入栈。

      本题的解题思路就是利用递减栈,,维护在递减栈中维护输入元素的下角标角标而不维护元素值的原因,是因为最后输出是两个角标的差,而不是两个值得差。当下一个温度比栈顶温度高时,就将栈顶保存的角标弹出,与入栈温度的角标做差,得到间隔的天数,然后继续比较栈内元素,直到比栈内元素小或者相等或者栈内没有其他元素,将该温度入栈。当遍历一遍输入温度后,再将栈内剩余的所有角标对应的天数设置为0。

      我用C语言维护一个栈的思想也比较简单,就是用一个大的数组和一个变量标志栈顶位置来模拟栈的操作(还是STL方便啊)。

具体代码如下,可能不算很精简,有好的建议可以留言:

int* dailyTemperatures(int* T, int TSize, int* returnSize){
    if( T ==NULL || TSize <1)
        return NULL ;
    *returnSize = TSize;
    
    int * index = (int *)malloc(sizeof( int)*TSize) ;//模拟栈的行为
    int * result = ( int *)malloc(sizeof(int)*TSize);
    int top =-1;//标识栈的顶部位置
    for(int i = 0;i=0  && *(T+i) > *(T+index[top])  ){
            while(top>=0  && *(T+i) > *(T+index[top]) ){
                result[index[top]] =  i - index[top];
                top--;
            }
            top++;
            index[top] = i;
        }
    }
    while(top>=0)
    {
        result[index[top]] = 0;
        top--;
    }
    return result;
}

            

你可能感兴趣的:(leetcode)