第三周作业1(LeetCode53)
来源:互联网 发布:上古世纪捏脸数据图片 编辑:程序博客网 时间:2024/06/10 08:34
1. 题目描述(LeetCode53)
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.
More practice:
If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.
2. 解决思路
利用线性时间求解,时间复杂度为O(n)。
3. 完整代码
#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include <stdlib.h>void MaxSubSum(int *arr, int len, int &l, int &r);int main(){ int* arr = NULL; //存储数组 int len = 0; printf("请输入数组的长度:\n"); scanf("%d", &len); while (len <= 0) { printf("长度必须大于0,请重新输入:\n"); scanf("%d", &len); } arr = (int*)malloc(sizeof(int)* len); //数组分配内存 printf("请输入数组的每一位数:\n"); for (int i = 0; i<len; ++i) { scanf("%d", &arr[i]); } //调用封装好的功能函数 int l, r; MaxSubSum(arr, len, l, r); //输出结果 printf("新的数组长度为: %d\n", r - l + 1); printf("和最大的连续子数组元素为:\n"); for (int i = l; i <= r; ++i) { printf("%d ", arr[i]); } scanf("%d", &len); //加个输入让窗口停下来 free(arr); //释放内存 return 0;}void MaxSubSum(int *arr, int len, int &l, int &r){ int i; int MaxSum = 0; int CurSum = 0; int ll = -1; for (i = 0; i < len; i++) { CurSum += arr[i]; if (CurSum > MaxSum) { MaxSum = CurSum; l = ll + 1; r = i; } //如果累加和出现小于0的情况 //则和最大的子序列肯定不可能包含前面的元素 //这时累加和置零,从下个元素重新开始累加 if (CurSum <= 0) { CurSum = 0; ll = i; } }}
0 0
- 第三周作业1(LeetCode53)
- 第三周作业1(LeetCode53)
- 第三周作业1
- leetcode53
- 第三周编程作业1-奇偶个数
- 第三周编程作业1 奇偶个数
- Java第三周作业(1)
- 第三周作业
- 第三周作业 2
- 第三周作业 3
- 第三周作业 4
- 第三周作业
- 第三周作业
- 第三周作业
- 第三周作业
- 第三周作业
- 第三周作业
- c++第三周作业
- 【测试】测试之道
- UI界面的简单应用
- 最简单的android studio 2.3 引用SDL + FFmpeg例子程序
- C语言 · 阿尔法乘积
- 经验分享之前台显示表格数据
- 第三周作业1(LeetCode53)
- 聊一聊为什么要做公众号
- 算法设计与应用基础-第三周
- 设计模式学习笔记—23个模式
- 九度OJ-1480:最大上升子序列和
- @RequestMapping 用法详解之地址映射(转)
- HDU1030 Delta-wave
- 欢迎使用CSDN-markdown编辑器
- 在spring官网上下载spring的jar包及API文档