算法刷题 DAY62

739.每日温度

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize) {

    int my_stack[100005]={0};//遍历完栈内还有剩余元素→这些剩余元素右边没比它大的→res[i]=0;
    int top=0;
    int* res=(int*)calloc(temperaturesSize,sizeof(int));
    my_stack[top++]=0;
    //栈底部的元素是栈顶元素的左侧元素(数组位置)→栈顶元素只用和新入栈的元素(在数组右侧)比较大小


    for(int i=1;i<temperaturesSize;i++){
       
       while(top>=1&&temperatures[my_stack[top-1]]<temperatures[i]){//top指向待入栈位置→-1
           //新入栈元素比栈顶元素大→一直弹栈至不比栈顶大
           //栈内呈现单调递增(从栈顶到栈底)
            res[my_stack[top-1]]=i-my_stack[top-1];
            top--;
        }

        my_stack[top++]=i;//弹完在入栈     

    }

    (*returnSize)=temperaturesSize;
    return res;
    
}

496.下一个更大元素

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
//暴力解法
int* nextGreaterElement(int* nums1, int nums1Size, int* nums2, int nums2Size, int* returnSize) {

    int* res=(int*)calloc(nums1Size,sizeof(int));
    for(int i=0;i<nums1Size;i++) res[i]=-1;

    for(int i=0;i<nums1Size;i++){
        
        int j=0;
        while(nums1[i]!=nums2[j]) j++;//找到nums[i]在nums2中的位置
        for(int k=j+1;k<nums2Size;k++){//找打右侧第一个大于其的元素
            if(nums2[k]>nums2[j]){
                res[i]=nums2[k]; 
                break;
            }
        }
    }
    
    (*returnSize)=nums1Size;
    return res;
}

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值