当前位置: 首页 > news >正文

力扣上C语言编程题:最大子数组和(涉及数组)

一. 简介

本文记录力扣网上涉及数组方面的编程题,主要以 C语言实现。

二. 力扣上C语言编程题:最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

是数组中的一个连续部分。

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]

输出:6

解释:连续子数组为 [4, -1, 2, 1] 的和最大,其和为 6

示例2:

输入: nums = [1]

输出:1

解题思路:

使用贪心解法。什么是贪心解法?

“贪心解法”(Greedy Algorithm)是一种在算法设计中常用的策略,它通过每一步选择当前状态下局部最优解(即最有利的选择),期望通过这样的方式最终得到全局最优解。

贪心算法的核心是:每一步都做出局部最优的选择,希望通过局部最优解达到全局最优解。

局部最优:当前 “连续和” 为负数时立刻放弃,从下一个元素重新计算 “连续和” ,因为负数加上下一个元素 “连续和”只会越来越小。

全局最优:选取最大“连续和”

具体方法:

(1) 遍历数组,如果前面数组和小于 0,则从 nums[i] 开始重新新一轮求和计算;(因为数组和为负数时,再加下一个元素,只会让总和变小,即都会加重负担);

(2) 每次记录数组和的最大值;

C代码实现如下:

int maxSubArray(int* nums, int numsSize) {if ((!nums) || (numsSize == 0)) {return -1;}int i = 0;int prev_sums = nums[0];int max_sums = nums[0];//下标从1开始遍历for(i = 1; i < numsSize; i++) { if(prev_sums < 0) { //如果前面数组和小于0,则从nums[i]重新开始计数prev_sums = nums[i];}else { //前面数组和 >=0,则继续加nums[i]prev_sums = prev_sums + nums[i];}//每次更新子数组和的最大值if(prev_sums > max_sums) {max_sums = prev_sums;}}return max_sums;
}

相关文章:

  • Qwen3-Embedding-8B:文本嵌入界的“卷王”,多语言检索新标杆!
  • 嵌入式学习笔记 - C语言访问地址的方式,以及指针的进一步理解
  • 简单的五子棋实现简介
  • 6.11本日总结
  • typescript中的泛型
  • 字符串|数组|计算常见函数整理-竞赛专用(从比赛真题中总结的,持续更新中)
  • 使用CSDN作为Markdown编辑器图床
  • 【Python-Day 25】玩转数字:精通 math 与 random 模块,从数学运算到随机抽样
  • 图文教程——Deepseek最强平替工具免费申请教程——国内edu邮箱可用
  • 亚马逊Woot黑五策略,快速提升亚马逊业绩
  • LeetCode - 136. 只出现一次的数字
  • vue3 + ant 实现 tree默认展开,筛选对应数据打开,简单~直接cv
  • Java异步编程难题
  • 渗透测试PortSwigger Labs:遭遇html编码和转义符的反射型XSS
  • 使用Gradle打包springboot项目为JAR包教程
  • SQL进阶之旅 Day 26:分库分表环境中的SQL策略
  • python数据结构和算法(4)
  • 51la查看https统计,悟空统计助力高效运营
  • TensorZero:开源 LLM 应用优化与可观测性平台
  • 如何将照片从Android传输到Mac?
  • 网站获取用户/竞价网
  • 类似酷家乐做庭院的网站/海外市场推广方案
  • 网站加水印/seo标题优化裤子关键词
  • 深圳网站建设 手机网站建设/网站群发推广软件
  • 仿朋友圈网站建设/百度客服电话人工服务
  • 做网站需要用到的语言/域名注册官网免费