首页 > 编程语言 >贪心算法-题目3力扣53

贪心算法-题目3力扣53

时间:2024-01-18 15:57:59浏览次数:24  
标签:numsSize maxVal subArrSum nums int 53 力扣 数组 贪心

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

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

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

输出:6

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

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

解题思路:从投开始相加,每加一个数如果大于最大值就更新最大值,当加到的值小于0那么就从下一个值开始算起。

别人写的:

int maxSubArray(int* nums, int numsSize){
    int maxVal = INT_MIN;
    int subArrSum = 0;

    int i;
    for(i = 0; i < numsSize; ++i) {
        subArrSum += nums[i];
        // 若当前局部和大于之前的最大结果,对结果进行更新
        maxVal = subArrSum > maxVal ? subArrSum : maxVal;
        // 若当前局部和为负,对结果无益。则从nums[i+1]开始应重新计算。
        subArrSum = subArrSum < 0 ? 0 : subArrSum;
    }

    return maxVal;
}

我写的:
int maxSubArray(int* nums, int numsSize) { int sum=0;     int max=nums[0];     if(numsSize==1) return nums[0];     for(int i=0;i<numsSize;i++){         sum+=nums[i];         if(sum>max) max=sum;         if((i!=numsSize-1)&&sum<0) sum=0;             }     return max;   }   int maxSubArray(int* nums, int numsSize) { int sum=0;     int max=nums[0];     if(numsSize==1) return nums[0];     for(int i=0;i<numsSize;++i){         sum+=nums[i];         if(sum>max) max=sum;         if(sum<0) sum=0;//此处为什么写++i就成功了             }     return max;   }   for循环中i++和++i的区别

标签:numsSize,maxVal,subArrSum,nums,int,53,力扣,数组,贪心
From: https://www.cnblogs.com/lzj1996/p/17972641

相关文章

  • 题解 CF653F Paper task
    CF653FPapertask给定一个长度为\(n\)和括号串,求本质不同的合法括号串个数。\(n\le5\times10^5\)。考虑如果不是求本质不同,可以想到DP。设\(f_{i}\)表示以\(i\)结尾的括号串数,容易发现\(f_{i}=f_{t_{i}-1}+1\),其中\(t_{i}\)表示与\(i\)匹配的左括号位置。用栈......
  • 贪心算法-题目1力扣455(简单题)
    力扣455,给小朋友发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j] 。如果 s[j]>=g[i],我们可以将这个饼干 j 分配......
  • 【线段树/懒标】-【LG】P1253 扶苏的问题
    \(\mathtt{TAGS}\):懒标线段树\(\mathtt{ESTIMATION}\):Tag*2题意实现:区间\(\max\)区间修改某个值区间加First.确定数据结构很显然,区间修改+区间查询所以——线段树。Second.LazyTag由于区间修改和区间加两个操作会互相干扰,所以对于每一个节点给两个Tag,一个......
  • 「数位dp」统计整数数目(力扣第2719题)
    本题为1月16日力扣每日一题题目来源:力扣第2719题题目tag:数位dp动态规划题面题目描述给你两个数字字符串num1和num2,以及两个整数max_sum和min_sum。如果一个整数x满足以下条件,我们称它是一个好整数:\(num1\leqx\leqnum2\)\(min\_sum\leqdigit\_sum(x)\leqmax\_s......
  • P8253 [NOI Online 2022 提高组] 如何正确地排序
    P8253[NOIOnline2022提高组]如何正确地排序Problem有一个\(m\timesn\)的数组\(a_{i,j}\)。定义:\(f(i,j)=\min\limits_{k=1}^m(a_{k,i}+a_{k,j})+\max\limits_{k=1}^m(a_{k,i}+a_{k,j})\)。你需要求出\(\sum\limits_{i=1}^n\sum\limits_{j=1}^nf(i,j)\)。\(m=2,......
  • 20240113-力扣704二分查找
    leetcode链接:https://leetcode.cn/problems/binary-search/solutions/980494/er-fen-cha-zhao-by-leetcode-solution-f0xw/代码随想录链接:https://programmercarl.com/0704.二分查找.html#算法公开课考点:二分查找解决代码:classSolution{publicintsearch(int[]num......
  • 图论 - 某进制分组 - P5304 旅行者
    P5304旅行者\(\mathtt{TAGS}\):多源多汇最短路,二进制分组\(\mathtt{ESTIMATION}\):非常好二进制分组,让我的大脑旋转题意简述给定\(k\)个点和一张有向图,求以这\(k\)个点为起点和终点的最短路中最短的一条的长度。First.怎么求多源多汇最短路solution.1超级源点和超级......
  • P5321 [BJOI2019] 送别 题解--zhengjun
    由于大家的做法需要大量分类讨论和代码量,这里提供一种不怎么分类的,容易实现的做法。首先,由于墙体会随时变化,所以直接对墙体本身维护不是很方便。我们可以牺牲一点常数,对\((i,j)\)建立四个点\(UL_{i,j},UR_{i,j},DL_{i,j},DR_{i,j}\)分别表示\((i-\varepsilon,j-\varepsilo......
  • 基于单片机的垃圾桶系统设计(#0531)
    功能描述1、采用51单片机作为主控芯片;2、采用超声波模块检测桶满否(安装于桶盖,测量距垃圾距离);3、采用L298芯片控制“垃圾压缩机”动力;4、当感应到人体或震动,打开桶盖->关闭桶盖->启动压缩机->压缩受阻->压缩机复位;5、当压缩机转速小于设置阈值,即压缩机转动受阻(电位计模拟),表示......
  • 基于单片机的计算器系统设计(#0530)
    功能描述1、采用51/52单片机作为主控芯片;2、采用矩阵键盘输入计算;3、采用1602液晶显示计算内容及结果;4、支持最大运算范围:9990*9990;5、支持加减、乘除、开方运算;6、支持负数运算。电路设计采用Altium Designer作为电路设计工具。Altium Designer通过把原理图设计、PCB绘制编......