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

做网站的公司 成都百度打广告多少钱一个月

做网站的公司 成都,百度打广告多少钱一个月,网易云网站开发,北京市建设工程交易服务中心网站连续数组&#xff08;前缀和专题&#xff09; 目录 &#x1f6a9;了解题意 &#x1f6a9;算法原理 ❗为什么hash设置成<0,-1>键值对 ❗与和为K的子数组比较hash的键值对 &#x1f6a9;代码实现 &#x1f6a9;了解题意 我们看到给定数组里面只有0和1&#xff0c;我们…

连续数组(前缀和专题)

目录

🚩了解题意

🚩算法原理

❗为什么hash设置成<0,-1>键值对

❗与和为K的子数组比较hash的键值对

🚩代码实现


🚩了解题意

我们看到给定数组里面只有0和1,我们要找到一个连续的子数组具有相同数量的0和1,那么我们想想,如果我们给0代替成-1,那么-1 1 -1 1是不是等于0是不是相当于找到了具有相同数量的0和1了。

所以 我们首先要想到 将0改成-1 ,然后找到相同的0和1的数量就转换成在数组中最长的子数组中和为0.

这一题和 和为K的子数组 很像 ——和为0的子数组(我们只需要将0改成-1即可)


🚩算法原理

该函数的主要目的是找到nums中的一个最长的连续子数组,该子数组中0和1的数量相等。它使用了一个哈希表hash来记录当前累积和首次出现的位置,以便在后续遍历中可以计算当前累积和与首次出现位置之间的距离,从而得到最长的满足条件的子数组长度。

还是利用哈希+前缀和思路。但是这一题我们需要考虑到几个细节。

我们先给过程分析一下吧

  1. 创建一个无序哈希表hash,用于存储累积和及其首次出现的位置。初始化时将累积和为0的位置设为-1,这样方便后续计算。
  2. 初始化两个整数变量sumret,分别用于存储当前累积和和最长满足条件的子数组长度。
  3. 使用循环遍历nums中的每个元素,对累积和进行更新。如果当前元素为0,则累积和加上-1,否则加上1。
  4. 在每次更新累积和后,检查哈希表中是否已经记录了当前累积和。如果已经记录,则计算当前位置与首次出现位置的距离,并更新最长子数组长度ret。否则,将当前累积和及其位置记录到哈希表中。
  5. 最后,返回最长子数组长度ret作为结果。

这段代码的时间复杂度为O(n),其中n是输入向量nums的长度。


这里有几个细节问题

为什么累积和为0的位置设为-1,我们根据一个情况来阐述吧

<0,-1>键值对,0代表前缀和,-1代表下标。

❗为什么hash设置成<0,-1>键值对

在这段代码中,将累积和为0的位置设为-1的目的是为了在计算最长子数组长度时能够正确处理从数组开头开始的子数组。

在遍历数组时,累积和为0意味着从数组开始到当前位置的子数组中0和1的数量相等。因此,如果在后续的遍历中再次遇到累积和为0,那么说明中间这段子数组中0和1的数量仍然相等。

如果没有将累积和为0的位置设为-1,而是设为0,那么在计算距离时可能会得到错误的结果。因为累积和为0的情况可能出现在数组的第一个位置,此时距离为当前位置减去0,会导致计算出的距离比实际子数组长度小1。

因此,将累积和为0的位置设为-1可以避免这种情况,确保计算出的最长子数组长度是正确的。


❗与和为K的子数组比较hash的键值对

hash[0] = 1 的目的是在处理前缀和时确保能够正确统计到和为k的子数组的数量。这是一个常用的技巧,主要是为了处理当前缀和恰好等于k的情况。

具体来说,hash 这个哈希表用于统计前缀和出现的次数。在初始化时,将累积和为0的次数设置为1是为了确保能够正确处理累积和等于k的情况。

考虑这样一种情况,如果数组中存在一个子数组的和正好等于k,那么这个子数组的前缀和减去k就等于0。因此,在遍历数组时,当遇到一个前缀和sum时,如果之前已经有一个前缀和sum - k存在,那么说明从那个前缀和到当前位置的子数组和正好为k。

举个例子,假设有数组 nums = [1, 2, 3],而 k = 3。在遍历过程中,前缀和依次为1、3、6,此时对于前缀和为3,前缀和为0的情况正好存在,这意味着从数组开头到当前位置的子数组和为3,满足条件。

因此,初始化时将 hash[0] = 1 是为了确保能够正确处理这种情况。


和为K的子数组:<0,1> 在和为K的子数组中0代表前缀和,1代表前缀和出现的次数

和为0的子数组:这一题<0,-1> 在和为0的子数组中 0代表前缀和,-1代表下标的位置。


🚩代码实现

class Solution {
public:int findMaxLength(vector<int>& nums) {unordered_map<int,int>hash;hash[0]=-1;int sum=0,ret=0;int dest=0;for(int i=0;i<nums.size();i++){sum+=nums[i]==0?-1:1;//如果sums[i]==0就改成-1,否则就是1if(hash.count(sum)) ret=max(ret,i-hash[sum]);else hash[sum]=i;//这里记录的是长度}return ret;}
};

我们会一直一直在一起哒!

http://www.dinnco.com/news/61780.html

相关文章:

  • 如何利用网站做淘宝联盟如何进行搜索引擎优化?
  • html网页设计基础东莞优化seo
  • 陕西建设厅八大员官方网站在线注册免费域名
  • 大都会app可以删记录吗谷歌seo站内优化
  • 怎么发布php网站沧州seo包年优化软件排名
  • win8风格手机网站模板seo搜索引擎优化培训班
  • 做的好点的外贸网站青岛网站
  • wordpress七牛云使用seo个人博客
  • 舆情报告分析结构优化
  • 有网站的源代码怎么生成网站荆州百度推广
  • wordpress分类目录和页面江门seo推广公司
  • 沧州市网站制作公司怎样看网页的友情链接
  • 沈阳网站企业舆情信息在哪里找
  • 网站建设怎么做谷歌浏览器下载app
  • 党风廉政建设网站2023最近爆发的流感叫什么
  • 上市企业网站建设互联广告精准营销
  • jq插件网站百度推广客服中心
  • 管理网站模板下载制作网站推广
  • 网站建设阶段口碑营销有哪些
  • 镇江教育云网站建设中国去中心化搜索引擎
  • 白领兼职做网站seo站长论坛
  • 织梦网站更改主页链接seo网站推广技术
  • 网站建设多少钱 小江网页设计北京网站优化步
  • 公司网站建设维护的岗位如何建立网站的步骤
  • 王也微信头像seo模拟点击算法
  • 网站建设好的公司哪家好网站推广关键词排名优化
  • 制作一个网站要多少钱百度怎么免费推广自己的产品
  • 南京网站建设小程序崇左seo
  • 对网站分析深圳全网推广平台
  • 做网站优化步骤如何制作网页教程