
1.买卖股票的最佳时机
题目要求获得最大利益,所以我的想法是,只要前一天股市价格比后一天低,我们就可以理解为再前一天买入,在后一天卖出,这样就能获得利益,然后数组从前到后,每间隔的两天都进行此 *** 作,就可以保证获得的利润最大
int maxProfit(int* prices, int pricesSize){
int i, j, sum = 0;
if(prices==0||pricesSize==0){
return 0;
}
for(i = 0;iprices[j]){
break;
}
else{
sum += prices[j] - prices[i];
i = j;
}
}
}
return sum;
}
2.整数反转
在读到这个题目时,我的第一个想法是,需要旋转的数字存进一个数组,但是由于我们不知道输入数字的长度,所以可以将数字倒着存进去,这一步同时也实现了将数字翻转过来,再获得最后反转后的数字时就可以直接按顺序计算,但是在输出时需要考虑反转后的数字会不会超过题目规定范围
int reverse(int x){
int a[11];
int i = 0;
long long temp = 0;
while(x!=0){
a[i] = x % 10;
x = x / 10;
i++;
}
for(int j = 0;jpow(2,31)-1||temp
在看了题解和咨询他人后,发现可以不用利用数组,每次都进行取当前数字最后一位,再按照倍数关系,与当前反转后的数字相加,同时也需要考虑最后的范围
int reverse(int x){
long long int r, temp = 0;
while(x!=0){
r = x % 10;
temp = temp * 10 + r;
x = x /10;
if(temp>pow(2,31)-1||temp
3.验证回文串
这道题目输入可能中间会有符号,大小写字母,数字,在利用ASCⅡ码判断时,需要保证大小写一致,并且去掉字符串中符号,先遍历一遍字符串,将其中大写转化为小写,去掉标点,从前到后存入一个新字符串中,然后定义两个指针,当左指针小于右指针时,同时向中间判断指针所指的字符是否一样,存在不一样就返回false
bool isPalindrome(char * s){
int len1 = strlen(s), cnt = 0;
char t[len1];
if(s==0){
return false;
}
for(int i = 0;i=97&&s[i]<=122){
t[cnt++] = s[i];
}
if(s[i]>=65&&s[i]<=90){
t[cnt++] = s[i] + 32;
}
if(s[i]>=48&&s[i]<=57){
t[cnt++] = s[i];
}
}
int i = 0, j = cnt-1;
while(i
4.有效的字母异位词
在判断时,当两个字符串长度不相等时,直接返回false,把两个字符串中的每个字符出现的次数用两个数组记录下来,再判断两个数组中相同字符出现次数是否相同
bool isAnagram(char * s, char * t){
int len1 = strlen(s), len2 = strlen(t);
if(len1!=len2){
return false;
}
int a[256] = {0}, b[256] = {0};
for (int i = 0;i
5.删除链表的倒数第N个节点
定义两个指针,让第一个指针先走N步,如果第一个指针为空,说明N正好为链表长度,所以删除倒数第N个就是删除第一个,当第一个指针不为空时,再让两个指针同时向后移,当第一个指针指向空时,此时第二个指针所指的结点就是需要删除的结点
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
int i;
struct ListNode *p1=head,*p2=head;
for(i=0;inext;
while(p1!=NULL&&p1->next!=NULL){
p1=p1->next;
p2=p2->next;
}
if(p1==NULL) head=head->next;
else p2->next=p2->next->next;
return head;
}
6.有效的括号
这道题用到栈的思想,因为有效的括号必须是前括号开始,后括号结尾,而且交错的括号例如(【)】这样的括号对是错的,所以当遇到前括号把与他相匹配的后括号存进新数组中,当遇到第一个后括号时,与新数组中最末尾的元素比较,一旦不匹配,就输出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欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)