| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| struct ans { |
| int low, high, sum; |
| }; |
| void FindMaxSub(int A[], int low, int high, struct ans *a); |
| void FindMaxCrosSub(int A[], int low, int mid, int high, struct ans *a); |
| |
| int main() |
| { |
| int *A = NULL; |
| int B[17] = { 100, 113, 110, 85, 105, 102, 86, 63, 81, 101, 94, 106, 101, 79, 94, 90, 97 }; |
| int n = 0, i = 0; |
| struct ans Ans; |
| scanf("%d", &n); |
| A = (int *)malloc(sizeof(int)*n); |
| for(i = 0; i<n; i++){ |
| scanf("%d",A+i); |
| } |
| for (i = n - 1; i>0; i--) { |
| A[i] = A[i] - A[i - 1]; |
| } |
| |
| FindMaxSub(A, 1, n - 1, &Ans); |
| printf("\n low = %d, high = %d, sum = %d\n", Ans.low, Ans.high, Ans.sum); |
| |
| system("pause"); |
| return 0; |
| |
| |
| } |
| |
| void FindMaxSub(int A[], int low, int high, struct ans *a) |
| { |
| if (low == high) { |
| a->low = a->high = low; |
| a->sum = A[low]; |
| } |
| else { |
| struct ans a1, a2, a3; |
| int mid = (low + high) / 2; |
| |
| FindMaxSub(A, low, mid, &a1); |
| FindMaxSub(A, mid + 1, high, &a2); |
| FindMaxCrosSub(A, low, mid, high, &a3); |
| |
| |
| |
| |
| if (a1.sum >= a2.sum && a1.sum >= a3.sum) { |
| a->low = a1.low; |
| a->high = a1.high; |
| a->sum = a1.sum; |
| } |
| else if (a2.sum >= a1.sum && a2.sum >= a3.sum) { |
| a->low = a2.low; |
| a->high = a2.high; |
| a->sum = a2.sum; |
| } |
| else { |
| a->low = a3.low; |
| a->high = a3.high; |
| a->sum = a3.sum; |
| } |
| |
| } |
| } |
| void FindMaxCrosSub(int A[], int low, int mid, int high, struct ans *a) |
| { |
| int leftsum = A[mid], rightsum = A[mid + 1]; |
| int minleft, i, maxright, j; |
| int sum = 0; |
| minleft = i = mid; |
| maxright = j = mid + 1; |
| while (i >= low) { |
| sum += A[i]; |
| if (sum>leftsum) { |
| leftsum = sum; |
| minleft = i; |
| } |
| i--; |
| } |
| sum = 0; |
| while (j <= high) { |
| sum += A[j]; |
| if (sum>rightsum) { |
| rightsum = sum; |
| maxright = j; |
| } |
| j++; |
| } |
| a->low = minleft; |
| a->high = maxright; |
| a->sum = (leftsum + rightsum); |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)