最大子序列和:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
int maxSubArray(int* nums, int numsSize){ int i = 0; int sum=nums[0]; int summax = nums[0]; for(i = 1; i < numsSize;i++) { if((nums[i]>sum)&&(sum<0)) { sum = nums[i]; } else{ sum+=nums[i]; } // printf("sum=%d,nums[i]=%d ",sum,nums[i]); if(summax < sum){ summax=sum; } } return summax; }
报数序列:
是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n(1 ≤ n ≤ 30),输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
输入: 1
输出: "1"
示例 2:
输入: 4
输出: "1211"
#define Len 4500 char * countAndSay(int n){ char *pre, *num; int i=1; int len=0; int m=0; char flag; int index=0; pre = (char *)malloc(sizeof(char) * Len);//保存当前字符串 num = (char *)malloc(sizeof(char) * Len);//保存上一层字符串 if(n==1) return "1"; else { num=countAndSay(n-1);//求出上一层字符串 len=strlen(num);//求出上一层字符串长度 flag=num[0];//标记字符为第一个字符 m=1;//记录标记字符的个数 while(i<len)//向后遍历 { if(num[i]==flag)//如果当前字符和标记字符一样 m+=1;//个数加一 else//如果当前字符和标记字符不一样 { pre[index++]=m+'0';//将此次遍历结果写入结果字符串中 pre[index++]=flag; m=1;//修改个数 flag=num[i];//修改标记字符为当前字符 } i+=1; } pre[index++]=m+'0';//将最后一次遍历结果写入字符串中 pre[index++]=flag; pre[index]='