(4)C語言——求最大連續子序列和
阿新 • • 發佈:2017-08-22
log spa clas 最大連續子序列和 alloc 最大 code max 連續
題目:
輸入一組整數,求出這組數字子序列和中最大值。也就是只要求出最大子序列的和,不必求出最大的那個序列。例如:
序列:-2 11 -4 13 -5 -2,則最大子序列和為20。
序列:-6 2 4 -7 5 3 2 -1 6 -9 10 -2,則最大子序列和為16。
1.
1 /* 2 算法一:窮舉法(3個for) 3 時間復雜度:O(n^3) 4 5 */ 6 #include <stdio.h> 7 #include <malloc.h> 8 9 int Max = 0; 10 int find_max(int len, intarr[]){ 11 int i, j, k, sum; 12 for(i=0; i<len; i++){ 13 for(j=i; j<len; j++){ 14 sum = 0; 15 for(k=i; k<=j; k++){ 16 sum += arr[k]; 17 } 18 if(sum > Max){ 19 Max = sum; 20 } 21 }22 } 23 return Max; 24 25 } 26 27 int main(){ 28 int i, len, *arr; 29 printf("請輸入數組的長度: "); 30 scanf("%d",&len); 31 arr = (int *)malloc(sizeof(int)*len); 32 printf("請輸入數組的值:"); 33 for(i=0; i<len; i++){ 34 scanf("%d",&arr[i]); 35 } 36 find_max(len,arr);37 printf("最大連續子序列和 :%d\n", Max ); 38 39 return 0; 40 }
2.
1 /* 2 算法二:算法一的優化 (2個for) 3 時間復雜度:O(n^2) 4 */ 5 #include <stdio.h> 6 #include <malloc.h> 7 8 int Max = 0; 9 int find_max(int arr[],int n, int len){ 10 int i, sum = 0; 11 for(i=n; i<len; i++){ 12 sum += arr[i]; 13 if(sum > Max){ 14 Max = sum ; 15 } 16 } 17 return Max; 18 } 19 20 int main(){ 21 int i, len, *arr; 22 printf("請輸入數組的長度:"); 23 scanf("%d",&len); 24 arr = (int *)malloc(sizeof(int)*len); 25 printf("請輸入數組的值:"); 26 for (i=0; i<len; i++) 27 { 28 scanf("%d", &arr[i]); 29 } 30 31 32 for(i=0; i<10; i++){ 33 find_max(arr,i, len); 34 } 35 36 printf("最大連續子序列和:%d \n",Max); 37 38 return 0; 39 }
3.
1 /* 2 算法三:聯機算法 3 時間復雜度:O(n) 4 */ 5 #include <stdio.h> 6 #include <malloc.h> 7 8 int Max = 0; 9 int find_max(int len, int arr[]) 10 { 11 int i, sum = 0; 12 for(i=0; i<len; i++) 13 { 14 sum += arr[i]; 15 if(sum > Max) 16 { 17 Max = sum; 18 }else if(sum < 0){ 19 sum = 0; 20 } 21 } 22 23 return Max; 24 } 25 26 int main(){ 27 int i, len, *arr; 28 printf("請輸入數組的長度:"); 29 scanf("%d",&len); 30 arr = (int *)malloc(sizeof(int)*len); 31 printf("請輸入數組的值:"); 32 for (i=0; i<len; i++) 33 { 34 scanf("%d", &arr[i]); 35 } 36 find_max(len, arr); 37 printf("最大連續子序列和:%d \n",Max); 38 return 0; 39 }
參考:http://blog.163.com/kevinlee_2010/blog/static/169820820201010495438247/
(4)C語言——求最大連續子序列和