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

网站外链怎么发布济南网站建设电话

网站外链怎么发布,济南网站建设电话,网站建设技术文案,商城网站建设报文章目录 题目介绍思路分析异地复写优化为就地复写 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/813938.html

相关文章:

  • 怎么在Front做网站网站表单制作
  • 温州高端模板建站asp.net做网站的步骤
  • 西安东郊网站建设公司建筑人才网招聘官网
  • 深圳网站制作济南公司网站怎么建立需要多少钱
  • 网站数据库安全人流什么时间做 新闻源网站
  • 行业网站运营计划佛山网站优化效果
  • 信阳网站建设找汉狮品牌网站建设企业
  • 网站系统怎么建设wordpress下载管理插件下载
  • wordpress耗资源升级程序seo网站建设是什么
  • 访问网站的原理dz整站网站建设
  • 网站seo关键词优化排名网站建设的项目计划
  • 制作网站品牌公司简介网站开发和软件
  • 公司网站打开显示建设中网站排名网站优化
  • 做网站编程搜索引擎排名机制
  • 做网站排名的公司北京室内设计公司
  • 威宁网站建设蜘蛛云建站网站
  • 网站建设管理情况自查报告用dw做简单图片网站
  • 莆田网站建设维护总部基地网站建设公司
  • 区域网站查询wordpress 分类页面打开400
  • 忆唐网不做网站做品牌中国关键词官网
  • 铜川做网站php网站说明
  • 域名连接到网站吗如何建立公司网站?
  • 武安网站制作网站建设顺利交付
  • 创业型企业网站模板wordpress转载微博
  • 公司网站建设策划书尚品宅配网站建设
  • 网站免费大全一般做哪些外贸网站
  • 太原做网站深圳模板开发建站
  • 响应式网站做多大的尺寸搜索指数
  • 网站建设找客户渠道城市建设规划网站
  • 公司网站建设需要咨询什么问题专门做鞋的网站