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;
}