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

郑州做网站远辰网站开发项目报价

郑州做网站远辰,网站开发项目报价,导游网站后台,河南网站优化公司10. 53.最大子数组和(中等,学习) 思想 1.给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。 2.跟"5. 1749.任意子数组和的绝对值"…
10. 53.最大子数组和(中等,学习)
思想

1.给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组是数组中的一个连续部分。
2.跟"5. 1749.任意子数组和的绝对值"的最大值很像,但不一样,"5. 1749.任意子数组和的绝对值"条件是abs(s[r+1]-s[l])最大,因为有绝对值,所以可以同时计算最大值mx和最小值mn,答案为mx-mn,不管mx在mn左边还是右边出现,都满足连续子数组。而此题要求s[r+1]-s[l]最大,所以s[r+1]一定要出现在s[l]右侧,不能同时找最大值和最小值相减(因为如果最大值在最小值左侧,不满足连续子数组),所以可以枚举右侧s[r+1],而维护其左侧的最小值pre_s_mn,因为要求子数组最少包含一个元素,所以先更新答案,再维护最小值

代码

c++:

class Solution {public:int maxSubArray(vector<int>& nums) {int n=nums.size();if(n==1)    return nums[0];int s=0,pre_s_mn=0,res=INT_MIN;for(auto& x:nums){s+=x; // 当前前缀和res=max(res,s-pre_s_mn); // 减去之前最小前缀和pre_s_mn=min(s,pre_s_mn); // 维护最小前缀和}return res;}};

前缀和与哈希表

通常要用到「枚举右,维护左」的技巧。

1.套路

前缀和数组满足
s [ r + 1 ] − s [ l ] = g o a l s[r+1]-s[l]=goal s[r+1]s[l]=goal,所以可以枚举 s [ r + 1 ] s[r+1] s[r+1],哈希表查询 s [ l ] = s [ r + 1 ] − g o a l s[l]=s[r+1]-goal s[l]=s[r+1]goal
但是因为是前缀和数组,一个元素的数组也满足的话哈希表里面得有一个元素0,所以

  • s先进哈希表:++mp[s]
  • s再更新:s+=x
  • 最后更新答案:res+=mp[s-goal]
class Solution {
public:int numSubarraysWithSum(vector<int>& nums, int goal) {int n = nums.size();int res = 0, s = 0;map<long long, long long> mp; // 哈希表for (auto& x : nums) {++mp[s]; // 让一个元素也满足,因为前缀和数组第一个元素是0s += x;res += mp[s - goal];}return res;}
};
2.题目描述

1.给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个(答案) 和为 goal非空(条件) 子数组。
子数组是数组的一段连续部分。
2.给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数(答案)

3.学习经验

1.注意顺序:

  • s先进哈希表:++mp[s]
  • s再更新:s+=x
  • 最后更新答案:res+=mp[s-goal]
    2.题目一般为子数组和为k,但是变为前缀和就是 s [ r + 1 ] − s [ l ] = g o a l s[r+1]-s[l]=goal s[r+1]s[l]=goal,所以可以枚举 s [ r + 1 ] s[r+1] s[r+1],哈希表查询 s [ l ] = s [ r + 1 ] − g o a l s[l]=s[r+1]-goal s[l]=s[r+1]goal (不是 g o a l − s [ r + 1 ] goal-s[r+1] goals[r+1])
    3.但无需显示定义前缀和数组,拿一个变量s即可
1. 930.和相同的二元子数组(中等,学习,注意顺序)
思想

1.给你一个二元数组 nums ,和一个整数 goal ,请你统计并返回有多少个和为 goal非空 子数组。
子数组 是数组的一段连续部分。
2.前缀和数组满足
s [ r + 1 ] − s [ l ] = g o a l s[r+1]-s[l]=goal s[r+1]s[l]=goal,所以可以枚举 s [ r + 1 ] s[r+1] s[r+1],哈希表查询 s [ l ] = s [ r + 1 ] − g o a l s[l]=s[r+1]-goal s[l]=s[r+1]goal
但是因为是前缀和数组,一个元素的数组也满足的话哈希表里面得有一个元素0,所以

  • s先进哈希表:++mp[s]
  • s再更新:s+=x
  • 最后更新答案:res+=mp[s-goal]
    3.此题还可以恰好型滑动窗口(去滑动窗口专题搜索)
代码

c++:

class Solution {
public:int numSubarraysWithSum(vector<int>& nums, int goal) {int n = nums.size();int res = 0, s = 0;map<long long, long long> mp;for (auto& x : nums) {++mp[s]; // 让一个元素也满足,因为前缀和数组第一个元素是0s += x;res += mp[s - goal];}return res;}
};
2. 560.和为K的子数组(中等)
思想

1.给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数
子数组是数组中元素的连续非空序列。
2.跟930.和相同的二元子数组一模一样

代码

c++:

class Solution {
public:int subarraySum(vector<int>& nums, int k) {int n = nums.size();map<long long, int> mp;long long s = 0;int res = 0;for (auto& x : nums) {++mp[s];s += x;res += mp[s - k];}return res;}
};
http://www.dtcms.com/a/404818.html

相关文章:

  • 企业网站客户案例离线网页制作工具
  • 长沙手机网站建设哪些内容怎样查看网站是否备案
  • 网站改标题不改版 k注册域名 不建网站
  • 可以找酒店案例的网站wordpress破解密码
  • 网站建设有什么用如何做网站数据报表
  • 开封网站建设zducm网络信息安全工程师
  • 自己做商城网站能卖服装吗国家企业信用信息查询公示系统官网
  • 电影网站建设规划书上海青浦做网站
  • 质量好网站建设商家电子商务网站开发设计案例—易趣网电子商务网站
  • 做网站是干什么用的越秀企业网站建设
  • 网站服务器租用售价个人php网站
  • 建设网站 xp南宁市建设厅官方网站
  • 做网站图片处理问题深圳网站建设公司招聘
  • 中国建设布网站宁波最大的网络平台制作公司
  • 用上网做任务的网站镇江智能网站建设哪家好
  • 青海省住房与城乡建设厅网站上海比较有名的外贸公司
  • 站长网站素材永久免费云主机
  • 怎做连接网站wordpress 电子书模板
  • 百度竞价找谁做网站个人网站做淘宝客会怎样
  • 公司建网站制作平台wordpress筛选插件
  • 百度智能云建站网站体验调查问卷怎么做
  • 个人建网站的步骤wordpress列表缩略图
  • 建站之星 网站排名电子商务网站规划书
  • 凡科建站骗子wordpress 统计字数
  • 贵阳网站建设q.479185700惠建筑人才兼职网
  • 英迈思网站做不下去可以退款吗wordpress无法调用主题布局和图片
  • 用织梦做领券网站广州网站设计出名 乐云践新
  • 怎么查网站死链接做网站金山
  • 微信上微网站怎么做的吗网站建设编写代码问题
  • 网站备案需要什么条件wordpress中文主题排行榜