一、150 逆波兰表达式求值

int Toint(char*s){
int num=0;//表示处理后的数字
int tens = 1;//代表权重
for(int i=strlen(s)-1;i>=0;i--){//从后往前遍历
if(s[i]=='-'){//处理负数
num*=-1;
break;
}
num += (s[i]-'0')*tens;
tens *=10;
}
return num;
}
int evalRPN(char** tokens, int tokensSize) {
int *stack = (int *)malloc(sizeof(int)*tokensSize);
int stacktop = 0;
for(int i =0;i<tokensSize;i++){//遍历字符串数组
char tmp = (tokens[i])[0];//获取第一个元素
//if(tmp=='+'||tmp=='-'||tmp=='*'||tmp=='/')//错误
if (tmp < '0' && (tokens[i])[1] == '\0')
{//如果是字符
int num1 = stack[--stacktop];
int num2 = stack[--stacktop];//从栈中取两个数字
int result;
if (tmp == '+') {
result = num1 + num2;
} else if (tmp == '-') {
result = num2 - num1;
} else if (tmp == '*') {
result = num1 * num2;
} else {
result = num2 / num1;
}
stack[stacktop++] = result;
}else{//是数字
int num = Toint(tokens[i]);
stack[stacktop++] = num;
}
}
int result = stack[0];
free(stack);
return result;
}
二、239 滑动窗口最大值

int* maxSlidingWindow(int* nums, int numsSize, int k, int* returnSize) {
*returnSize = numsSize - k + 1;
int *res = (int*)malloc((*returnSize) * sizeof(int));
assert(res);
int *deque = (int*)malloc(numsSize * sizeof(int));
assert(deque);
int front = 0, rear = 0, idx = 0;
for (int i = 0 ; i < numsSize ; i++) {
while (front < rear && deque[front] <= i - k) {
front++;
}
while (front < rear && nums[deque[rear - 1]] <= nums[i]) {
rear--;
}
deque[rear++] = i;
if (i >= k - 1) {
res[idx++] = nums[deque[front]];
}
}
return res;
}