0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C编程:“最大子数组的和” 的动态规划的解法

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-08-21 09:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

C编程笔试 --“最大子数组的和” 的动态规划的解法

 1.最大子数组之和

例1:数组int a1[5] = { -1, 5, 6, -7, 3 };其最大子数组之和为:5+6=11
例2:数组int a2[5] = { -5, -4, -8, -1, -10 };其最大子数组之和为:-1
例3:数组 int a3[5] = { -1, 5, 6, -7, 10 };其最大子数组之和为:5+6-7+10=14

  功能实现:

# include 
# include 
int MaxSum(int* arr, int size)
{
    int current = arr[0]; //当前数组最大和
    int max = current;

    for (int i = 0; i < size; i++)
    {
        if (current < 0)
            current = 0;
        current += arr[i];
        if (current > max)
            max = current;
    }
    return max;
}

int main(void)
{
    char x[40], y[40];

    int a1[5] = { -1, 5, 6, -7, 3 };
    int a2[5] = { -5, -4, -8, -1, -10 };
    int a3[5] = { -1, 5, 6, -7, 10 };

    int max1, max2, max3;
    max1 = MaxSum(a1, 5);
    max2 = MaxSum(a2, 5); //这个应该返回 -1, 
    max3 = MaxSum(a3, 5);
	printf("max1=%d,max2=%d,max3=%d\n",max1,max2,max3);
}

 2.获取最大子数组的开始和结束的下标

  如果我需要返回值返回这个最大子数组的开始和结束的下标,你要怎么修改这个程序?

例1:数组int a1[5] = { -1, 5, 6, -7, 3 };其最大子数组之和为:5+6=11;最大子数组开始和结束下标为:1 2。
例2:数组int a2[5] = { -5, -4, -8, -1, -10 };其最大子数组之和为:-1;最大子数组开始和结束下标为:3 3。
例3:数组 int a3[5] = { -1, 5, 6, -7, 10 };其最大子数组之和为:5+6-7+10=14 ; 最大子数组开始和结束下标为:1 4。
例4:数组 int a3[] = {-2, -1, -3, 4, -1, 2, 1, -5, 4};其最大子数组之和为:4+(-1)+2+1=6 ; 最大子数组开始和结束下标为:3 6。
  功能实现:

#include 
#include 
void solution(int m, int *arr){
    int current=arr[0];
    int max=current;
    int start=0,end=0;
    int i=0;
    /*计算最大子数组之和*/
    for(i=1;imax)
        {
            max = current;
            end=i;//最大子数组结束下标
        }
    }
	int temp=max;
	/*计算最大子数组结束下标*/
    for(i=end;i>=0;i--)
    {
	  temp-=arr[i];
      if(temp<=0 || temp>max)break;
    }
	if(i<0)i=0;
    start=i;
    printf("%d,%d %d\n",max,start,end);
}
int main() {
    int n;
	printf("输入个数:");
    scanf("%d", &n);
    int *arr;
    arr = (int*)malloc(n * sizeof(int));
	printf("输入%d个整数:",n);
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }
    solution(n, arr);
    return 0;
}
;i++)>

  运行结果:

pYYBAGMBfYaAP_I9AAMUkvwWkUo576.png#pic_center

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • C语言
    +关注

    关注

    183

    文章

    7642

    浏览量

    144632
  • 数组
    +关注

    关注

    1

    文章

    420

    浏览量

    27114
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    第6章 中断与数码管动态显示(6.1 6.2)

    中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断
    的头像 发表于 12-08 17:03 340次阅读

    C语言的编程技巧

    一个成员是一个未知大小的数组,适用于动态分配内存并关联一个可变长度的数组。‌ ‌3、匿名结构体和联合体‌:C语言允许在结构体或联合体中定义不带标签的内部结构体或联合体,简化代码结构。
    发表于 11-27 06:46

    数组的初体验

    袋中的物品是按一定顺序放置的。 1.我们来看一下如何声明一个数组: 数据类型 数组名称[长度]; 数组只声明也不行啊,看一下数组是如何初始化的。说到初始化,
    发表于 11-25 08:06

    关于晶振的静态电容与动态电容

    静态电容与动态电容 C0与C1 的区别是什么呢?
    的头像 发表于 11-21 15:38 4106次阅读
    关于晶振的静态电容与<b class='flag-5'>动态</b>电容

    基于感知引导的多步骤精细操作任务与运动规划

    传统的任务与运动规划(TAMP)系统在机器人操作应用中通常依赖静态模型运行,因此在面对新环境时往往表现不佳。将感知与操作相融合,是应对这一挑战的有效途径,使机器人能够在执行过程中实时更新规划,从而适应动态变化的场景。
    的头像 发表于 11-14 10:18 1081次阅读
    基于感知引导的多步骤精细操作任务与运动<b class='flag-5'>规划</b>

    基于SIMP与折衷规划法的航空附件齿轮箱结构轻量化设计与动态特性提升

    航空发动机附件齿轮箱作为动力传递系统的关键部件,其箱体结构设计直接影响发动机的功率密度、可靠性及振动特性。针对传统经验设计方法难以满足高刚度、轻量化及高动态性能要求的挑战,本文提出了一种基于折衷规划法的多目标拓扑优化方法。
    的头像 发表于 11-07 15:21 439次阅读
    基于SIMP与折衷<b class='flag-5'>规划</b>法的航空附件齿轮箱结构轻量化设计与<b class='flag-5'>动态</b>特性提升

    Cognizant筹办最大规模氛围编程活动

    -Cognizant正在筹办全球最大规模的氛围编程活动,以提升数千名员工的AI素养 为抓住人工智能经济将创造的巨大机遇,Cognizant与Lovable、Windsurf、Cursor
    的头像 发表于 08-03 18:44 558次阅读
    Cognizant筹办<b class='flag-5'>最大</b>规模氛围<b class='flag-5'>编程</b>活动

    在STM32F103c8上做DLQR最优控制算法的C编程资料

    这是我近期做的一个项目--基于STM32F103c8的DLQR控制算法的C编程,涉及DLQR最优控制算法、嵌入式STM32F103编程、CMSIS-DSP库使用。    附有完整的程序
    发表于 07-23 15:30 0次下载

    AGV小车中的动态路径规划算法揭秘

    并非一成不变时,动态路径规划能力就显得至关重要。本文将深入探讨几种主流的动态路径规划算法(如A、Dijkstra、RRT等),并解析它们如何在AGV行业中大显身手。 为何需要
    的头像 发表于 06-17 15:54 1167次阅读
    AGV小车中的<b class='flag-5'>动态</b>路径<b class='flag-5'>规划</b>算法揭秘

    全球化市场调研新解法动态IP技术如何突破地域化数据壁垒

    当某国际智能家居品牌试图通过TikTok分析东南亚消费者偏好时,发现不同国家用户看到的推荐内容差异高达73%。这揭示了全球化市场调研的核心痛点——如何突破数字国界获取真实本地数据。动态IP技术正在成为破局关键,但其应用远非简单的IP切换。
    的头像 发表于 05-06 15:54 508次阅读

    单片机c语言编程实例大全

    单片机c语言编程实例大全_18
    发表于 04-30 16:11 6次下载

    为什么学了C语言,却写不出像样的项目?

    在学习编程的路上,C语言几乎是每个程序员的“必修课”。不管你是打算从事嵌入式开发、系统编程,还是想要深入理解操作系统的底层原理,C语言都是一块重要的基石。然而许多人在学习
    的头像 发表于 03-14 17:37 684次阅读
    为什么学了<b class='flag-5'>C</b>语言,却写不出像样的项目?

    C++学到什么程度可以找工作?

    动态规划、贪心算法等)。 3. **操作系统原理**:理解进程与线程、并发控制、同步机制(如互斥锁、信号量等)、进程间通信等概念。 4. **网络编程**:熟悉基于Socket的网络编程
    发表于 03-13 10:19

    字符串与字符数组的区别

    编程语言中,字符串和字符数组是两种基本的数据结构,它们都用于存储和处理文本数据。尽管它们在功能上有一定的重叠,但在内部表示、操作方式和使用场景上存在显著差异。 1. 内部表示 字符串 字符串在
    的头像 发表于 01-07 15:29 1689次阅读

    数组的下标为什么可以是负数

    最近有同学发来这样一段代码,并提出一个问题,数组的下标为什么可以是负数?     #include int main(){ const char *s = "helloworld"; const
    的头像 发表于 12-20 11:18 867次阅读