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

高端公司网站设计外贸网络营销平台

高端公司网站设计,外贸网络营销平台,有什么网站做任务换q币吗,做网站外包公司有哪些文章目录 题目介绍思路分析异地复写优化为就地复写 AC代码 题目介绍 链接: 1089. 复写零 思路分析 那么这道题我们依然可以使用双指针算法来解决 异地复写 先不考虑题目的要求,直接就地在原数组上修改,可能不太好想,我们这里可以先在一个…

文章目录

  • 题目介绍
  • 思路分析
    • 异地复写
    • 优化为就地复写
  • AC代码

题目介绍

链接: 1089. 复写零

在这里插入图片描述

思路分析

那么这道题我们依然可以使用双指针算法来解决

异地复写

先不考虑题目的要求,直接就地在原数组上修改,可能不太好想,我们这里可以先在一个新开的数组上进行复写

起始双指针分别指向两个数组0下标在这里插入图片描述
如果cur指向的元素是非0,dest只把cur的值拷贝下来,无需复习(只有0才复写),然后两者都++
在这里插入图片描述
cur如果指向0,那dest要拷贝两次(复写一次),然后两者都++
在这里插入图片描述
后续也是如此
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其实很简单,就是模拟题目要求的复写操作,非0不动,0复写
对比一下题目的例子,结果是正确的
在这里插入图片描述

优化为就地复写

那接下来我们就要尝试在上面的基础上进行优化,优化为原地复写
怎么做呢?现在就只能在原数组上就地操作了

我们来尝试一下:

在这里插入图片描述
上来cur指向非0
无需任何操作,两者++即可,刚才我们要拷贝是因为dest指向一个新数组,现在都指向原数组
在这里插入图片描述
然后cur是0,所以要复写一次0
在这里插入图片描述
那就变成这样了。
这样其实已经不行了,因为2被复写的0覆盖掉了,而cur++之后又指向了刚刚复写的0,这样后面都是0了,肯定的不对的

所以这道题从前向后移动指针是不行的,那我们可以反过来看看!

从后向前呢?
在这里插入图片描述
那两个指针都指向最后一个元素吗?
🆗,dest呢从最后一个位置开始,而cur,我们让它一开始指向最后一个被处理的数。
因为最后一个被处理的数处理完毕一定是在数组最后一个位置的。
怎么找最后一个处理的数我们后面说,但是对于当前这个例子,我们知道最后一个处理的数,就是4
在这里插入图片描述
然后,就让它们从后往前移动,进行像上面异地复写一样的操作就行了
在这里插入图片描述
答案正确!

总结一下:

先找到最后一个被处理的数,然后从后往前进行复写即可

那现在关键问题在于,对于任意一个数组,我们如何找到它最后一个处理的元素是谁?

那么这个问题也可以使用双指针来解决!
怎么做呢?
依然用上面这个例子
在这里插入图片描述
让cur从0开始,dest从-1开始,然后,其实就是去模拟整个复写的过程。
如果cur指向的是非0,让dest走一步(只拷贝,不复写),然后cur++;
如果是0,则dest走两步(拷贝+复写),然后cur++
当dest走到最后一个位置时候,就结束了,再走就越界了,此时,cur指向的元素就是最后一个被处理的数。
这个我就不再画图了,大家如果不理解可以自己画一下图走一遍。

但是,还有一种情况需要考虑:

在这里插入图片描述
如果最后一个被处理的数是0,这时dest往后走两步有可能出现越界的情况。
所以,针对这种情况,我们可以处理一下:
此时0就是最后一个被处理的数,cur从0开始倒着处理,那此时dest应该拷贝+复写,然后两者都- -
但是此时dest是越界的,即执行拷贝的位置是越界的,所以cur直接- -,然后复写一个0,然后两者都- -。
即把n-1下标置0,cur- -,dest-=2。
后续正常处理就行。

AC代码

上面分析的比较清楚了,代码就不过多解释了
在这里插入图片描述
在这里插入图片描述

class Solution {
public:void duplicateZeros(vector<int>& arr) {int n = arr.size();// 1.先找到最后一个被处理的元素int cur = 0;int dest = -1;while (dest < n - 1) {if (arr[cur] != 0)dest++;elsedest += 2;if (dest >= n - 1)break; // 如果dest>=n-1(走到最后一个位置或者越界的情况),// 此时cur就是最后一个被处理的元素,不能再++了,直接breakcur++;}// 2.处理一下dest越界的情况if (dest == n) {arr[n - 1] = 0;cur--;dest -= 2;}// 3.从后往前进行复写while (dest >= 0) {if (arr[cur] != 0)arr[dest] = arr[cur];else {arr[dest] = 0;arr[--dest] = 0;}cur--;dest--;}}
};
http://www.dtcms.com/wzjs/109729.html

相关文章:

  • 贵阳酒店网站建设网络运营培训哪里有学校
  • 济南网站制作服务价格免费建一个自己的网站
  • 58同城建设网站找关键词的方法与技巧
  • 网站制作公司汉狮网络知识付费小程序搭建
  • 自己做网站能赚到广告费吗网站seo基本流程
  • 网站制作前言公司win7怎么优化最流畅
  • 网站程序建设seo黑帽技术有哪些
  • 手机网站制作方法google adwords关键词工具
  • 建站平台隐藏技术支持肇庆seo排名
  • 做网站的公司都很小吗长沙企业seo服务
  • da面板做两个网站网络防御中心
  • xampp可以做网站吗西安关键词seo
  • 网站到期域名怎么解决办法windows优化大师功能
  • 营销型网站制作百度推广方案
  • 企业网站宣传册应该哪个部门做线上推广的优势和好处
  • 保山 网站建设百度网页入口
  • 电子商务网站的建设与流程杭州新站整站seo
  • 去年做啥网站能致富百度搜索引擎排行榜
  • 日照做网站的公司建立企业网站步骤
  • 广州海珠做网站百度搜索入口官网
  • 承德微网站建设安年软文网
  • 阿里巴巴做网站steam交易链接怎么改
  • 网页制作与网站开发用的软件营销型网站策划书
  • 网站建设如何做用户名密码今天微博热搜前十名
  • 张家口网站建设阿里云域名注册入口官网
  • vps 网站 需要绑定域名吗seo研究协会网是干什么的
  • 活动网页怎么做苏州搜索引擎排名优化商家
  • 陕西省住房城乡建设部门户网站昆明关键词优化
  • 抄袭网站怎么办个人小白如何做手游代理
  • 七台河新闻联播2021济南做seo的公司排名