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

电商网站怎么做的微友圈推广平台怎么加入

电商网站怎么做的,微友圈推广平台怎么加入,各种网站开发语言的优缺点,注册公司域名后如何做网站学习算法,继续加油!!! 一、将 x 减到 0 的最小操作数 题目解析 来看这一道题,题目给定一个数组nums和一个整数x;我们可以在数组nums的左边或者右边进行操作(x减去该位置的值)&#…

学习算法,继续加油!!!

一、将 x 减到 0 的最小操作数

题目解析

在这里插入图片描述

来看这一道题,题目给定一个数组nums和一个整数x;我们可以在数组nums的左边或者右边进行操作(x减去该位置的值);如果x可以减到0就返回最小操作数;如果不能,就返回-1

题目描述很简单,但是我们看到操作可以说非常头大,因为它可以在左边进行操作也可以在右边进行操作,那我们该如何去解决这个问题呢?

这里如果按题目要求去直接找左右两边的最小操作数,那这道题就非常难了。

我们不妨翻过来想,它们要求我们找左右两边操作数最小的;那我们是不是可以找数组中被我们删除左右两边后剩下的部分。

什么意思呢?

在这里插入图片描述

如上图所示,[0 , left)[right , n)是我们找到的操作数最小时的左右区间,此时这两个区间的和为x;那么我们就可以发现[left , right)区间的和就是sum - x(其中sum是数组中所以数据的和)。

那这样我们可以发现,我们找到满足题目中的要求左右两侧的区间时,此时数组中剩余的部分是一段连续的区间,并且该区间的和为sum - x

这时我们发现,只要找到一段连续的区间[left , right),并且该区间的和为sum - x,此时两侧区间的和就是x,就满足了题意;

那题目中要求我们找到最小的操作数,转换过来就是寻找的区间[left , right)最长。

算法思路

通过分析题目,我们将题目中的要求反过来想,就是我们需要找到一段连续的区间,此区间的和为sum - x,我们要找的长度最长的。

现在这道题就转换成了,找到和为sum - x的长度最长的区间(子数组)。

暴力解法:

这里简单提一下暴力解法,暴力解法节枚举所以子数组,找到其中满足条件且长度最长的。

在这里插入图片描述

这里暴力解法中right再从left位置开始遍历有些冗余,我们对其进行优化,使用s记录区间[left , right)的和,这样left++时,s减去即可;

这里因为right遍历到这个位置,区间的和s刚好满足,那left++后区间内的和一定小于sum - x,所以就不必要让right再从left位置进行遍历了。

这里使用滑动窗口进行优化:

这里为了方便描述,我们定义一个target = sum - x

  • 进窗口:当区间内的和s < target时,进窗口,更新区间内的和。
  • 出窗口:当区间内的和s > target时,进行出窗口操作,并更新区间内的和。
  • 更新结果:当出窗口操作之后,如果区间内的和s == target,这是区间满足条件,更新结果。

代码实现

这里写代码有一个坑:如果我们数组中的和小于x,此时target是小于0的,这时候我们是不能进行滑动窗口的一系列操作的。

我们需要进行特殊处理,如果target < 0,直接返回-1即可。

class Solution {
public:int minOperations(vector<int>& nums, int x) {int sum = 0;for(auto& e:nums)sum+=e;int target = sum - x;if(target < 0)return -1;int ret = -1;for(int left = 0, right = 0, s = 0;right < nums.size();){s+=nums[right++];while(s>target)s-=nums[left++];if(s == target)ret = max(ret, right - left);}if(ret == -1) return ret;elsereturn nums.size() - ret;}
};

二、水果成篮

题目解析

在这里插入图片描述

初看题目,一种当初做阅读理解的感觉,题目有点长;

来细看这一道题,给我们一个数组fruits,其中代表每一颗果树的种类;我们有两个果篮(每一个果篮只能装一种水果)我们现在要做的是进行采摘水果,根据题目描述:(我们采摘的水果只能有两种,并且采摘水果时是连续采摘的);我们要求的是我们收集水果的最大数量。

算法思路

了解了题目,现在来看如何去解决:

这里就不拐弯抹角了,直接看解题思路:

  • 入窗口:将right位置的水果采摘下来,并统计种类和数量。
  • 出窗口:当采摘的种类> 2时,我们要进行出窗口操作,将left位置对应的水果去出来;直到果篮中的种类<= 2
  • 更新结果:当果篮中的种类==2时,更新最终结果即可。

现在问题来了,如何去存储水果的种类和数量,并且我们还要方便进行存储、修改和删除操作?

这里就要用到哈希结构的unordered_map了;可以参考 unordered_set和unordered_map。

代码实现

治理代码实现就比较简单了:

class Solution {
public:int totalFruit(vector<int>& fruits) {int n = fruits.size();int left = 0, right = 0;unordered_map<int,int> ump;int ret = 0;while(right < n){//进窗口,直接使用[]ump[fruits[right++]]++;//出窗口while(ump.size() > 2){ump[fruits[left]]--;if(ump[fruits[left]] == 0)ump.erase(fruits[left]);left++;}ret = max(ret, right - left);}return ret;}
};

到这里,本篇文章算法讲解就结束了,感谢支持。

我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2oul0hvapjsws

http://www.cadmedia.cn/news/12428.html

相关文章:

  • 淘宝上 网站建设确认已有81人感染
  • 网站方案书百度网站推广怎么收费
  • 出色的网站广告软文200字
  • 深圳全网营销平台排名荥阳seo推广
  • 高端平面设计作品网站好搜seo软件
  • wordpress 上下页导航北京seo优化费用
  • 荣成市城乡建设局网站中国营销策划第一人
  • 网站建设维保合同超级外链自动发布工具
  • 信用网站建设情况搜索引擎技巧
  • 安徽网站建设天锐科技上海牛巨仁seo
  • 海南旅游网站建设方式网站销售怎么推广
  • 网站建设 三牛bing搜索 国内版
  • 网页游戏开服表怎么关闭优化设计全部答案
  • 企业建站搭建怎样做百度推广
  • 工作 网站建设内容免费seo视频教程
  • 手机站喝茶影视手机网站建设价格
  • 公司网站建设都需要什么内容北京seo优化外包
  • 企业邮箱登录入口官网wwseo推广网络
  • 盐城城南建设局一局网站长尾关键词挖掘精灵
  • 素材天下免费素材网四川旅游seo整站优化
  • 网页美工设计推荐国外seo
  • 淮南电商网站建设费用seo怎么做优化排名
  • 怎样做可以连接服务器的网站社区建站网站系统
  • 天涯论坛网站建设金阊seo网站优化软件
  • 深圳建网站多少钱网络营销的四种方式
  • 珠海网站建设陈玉铭关键词seo
  • 黄山网站建设优化大师有用吗
  • 广州网站建设哪好网站推广是干嘛的
  • 杭州今日凌晨发布紧急通知seo服务优化
  • 成都网站建设那家好昆明网络推广方式有哪些