2022.6.18(栈)
继续五月
题目描述:
给你一个目标数组
target
和一个整数n
。每次迭代,需要从list = {1,2,3..., n}
中依序读取一个数字。请使用下述操作来构建目标数组
target
:
Push:从
list
中读取一个新元素, 并将其推入数组中。Pop:删除数组中的最后一个元素。
如果目标数组构建完成,就停止读取更多元素。
题目数据保证目标数组严格递增,并且只包含
1
到n
之间的数字。
我的题解:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
//暴力模拟
char ** buildArray(int* target, int targetSize, int n, int* returnSize){
int i=0;
char** ret= NULL;
ret=(char**)malloc(sizeof(char*)*(2*n));
memset(ret,0,sizeof(ret));
*returnSize=0;
int num=1;
while(i<targetSize&&num<=n){
ret[(*returnSize)++]="Push";//不管该数字是否存在target都得push
if(target[i]==num){
i++;//如果该数字再target中则要++继续寻找下一个元素
}else{
ret[(*returnSize)++]="Pop";//否则pop继续找目标值
}
num++;
}
return ret;
}
我的思路:
自己看注释灰常容易
题目描述:
我的题解:
char * removeOuterParentheses(char * s){
int len=strlen(s);
char* ret=(char*)malloc(sizeof(char)*len);
char* stack=(char*)malloc(sizeof(char)*(len));
int top=0,idx=0;
for(int i=0;i<len;++i){
//遍历
char c=s[i];
//取出+判断
if(c==')'){
top--;
}
if(top>0){
ret[idx++]=c;
}
if(c=='('){
stack[top++]=c;
}
}
free(stack);
ret[idx]='\0';
return ret;
}
我的思路:
括号匹配,与左括号放入,右括号匹配pop出左括号,注意的最下层的再pop之后不能放入数组中