1.买卖股票的最佳时机
题目要求获得最大利益,所以我的想法是,只要前一天股市价格比后一天低,我们就可以理解为再前一天买入,在后一天卖出,这样就能获得利益,然后数组从前到后,每间隔的两天都进行此操作,就可以保证获得的利润最大
int maxProfit(int* prices, int pricesSize){
int i, j, sum = 0;
if(prices==0||pricesSize==0){
return 0;
}
for(i = 0;i<pricesSize;i++){
for(j = i+1;j<pricesSize;j++){
if(prices[i]>prices[j]){
break;
}
else{
sum += prices[j] - prices[i];
i = j;
}
}
}
return sum;
}
2.有效的括号
这道题用到栈的思想,因为有效的括号必须是前括号开始,后括号结尾,而且交错的括号例如(【)】这样的括号对是错的,所以当遇到前括号把与他相匹配的后括号存进新数组中,当遇到第一个后括号时,与新数组中最末尾的元素比较,一旦不匹配,就输出false,在遍历一遍后,如果新数组的下标未到达0,证明前后括号数量不同,也返回false
bool isValid(char * s){
int len = strlen(s), cnt = 0;
char a[10001];
if(len%2 == 1){
return false;
}
for(int i = 0;i<len;i++){
if(s[i] == '('){
a[cnt++] = ')';
}
else if(s[i] == '{'){
a[cnt++] = '}';
}
else if(s[i] == '['){
a[cnt++] = ']';
}
else{
if(cnt <1|| s[i] != a[--cnt]){
return false;
}
}
}
if(cnt!=0){
return false;
}
else{
return true;
}
}