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

温州微网站开发百度一下你就知道了主页

温州微网站开发,百度一下你就知道了主页,仿新浪首页网站模板,一级域名网站多少钱双指针法(快慢指针法)在数组、字符串和链表的操作中是非常常见的,这里结合力扣上的题进行可一下梳理,主要的思路是我们要明确快指针指的是什么,慢指针指的是什么。 1. 移除元素类问题 27. 移除元素 要我们移除目标元…

双指针法(快慢指针法)在数组、字符串和链表的操作中是非常常见的,这里结合力扣上的题进行可一下梳理,主要的思路是我们要明确快指针指的是什么,慢指针指的是什么。

1. 移除元素类问题

27. 移除元素

要我们移除目标元素,返回移动后元素的新长度。

  • 快指针:原数组的索引,这里是fast
  • 慢指针:移除后数组的索引,这里是slow

我们循环时一定是快指针遍历整个数组,然后慢指针根据条件移动,如果发现快指针不等于指定的目标元素val:nums[fast] != val,我们对当前的nums[slow]赋值为nums[fast],让后slow自增。

class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow = 0;for (int fast = 0; fast < nums.size(); ++fast){if (nums[fast] != val)nums[slow++] = nums[fast];}return slow;}
};

26. 删除有序数组中的重复项

要我们移除数组重复的元素,返回移动后元素的新长度。

  • 快指针:原数组的索引,这里是fast
  • 慢指针:移除后数组的索引,这里是slow

为了看是否有重复项我们一定是比较nums[fast]nums[fast - 1]看是否相等,如果不相等,说明不重复,我们可以把当前的nums[fast]赋值给nums[slow],并且slow往前移动一位,为了fast-1不越界,fast的遍历应该从1开始,也是遍历整个数组,既然从1开始,slow的初始值也应该是1,因为第一个元素我们认为不需要删除。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int slow = 1;for (int fast = 1; fast < nums.size(); ++fast){if (nums[fast] != nums[fast - 1])nums[slow++] = nums[fast];}return slow;}
};

80. 删除有序数组中的重复项 II

要我们移除数组重复的元素,返回移动后元素的新长度,每个元素最多有2个。

  • 快指针:原数组的索引,这里是fast
  • 慢指针:移除后数组的索引,这里是slow

朴素的思路是判断nums[fast]前后元素是否和nums[fast]一样。

class Solution {
public:int removeDuplicates(vector<int>& nums) {int slow = 1;for (int fast = 1; fast < nums.size(); ++fast){if (fast < nums.size() - 1){if (!(nums[fast] == nums[fast - 1] && nums[fast] == nums[fast + 1]))nums[slow++] = nums[fast];}else{nums[slow++] = nums[fast];//最后一个元素不管重不重复都放进来,因为至少要2个}}return slow;}
};

其实可以不拘泥于26题的写法:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = nums.size();if (n <= 2)return n;int slow = 2;for (int fast = 2; fast < n; ++fast){if (nums[slow - 2] != nums[fast])nums[slow++] = nums[fast];}return slow;}
};

移除保留最多k个元素的通用写法:

class Solution {
public:int removeDuplicates(vector<int>& nums) {int n = k;if (nums.size() <= k)return n;int slow = k;for (int fast = k; fast < nums.size(); ++fast){if (nums[slow - k] != nums[fast])nums[slow++] = nums[fast];}return slow;}
};

283.移动零

要我们把零全部移动到最后,一种直观的思路是使用移除元素的方法,把零移除完,然后从这时的slow开始把数组后面的值都赋值为0:

  • 快指针:原数组的索引,这里是fast
  • 慢指针:移除后数组的索引,这里是slow

class Solution {
public:void moveZeroes(vector<int>& nums) {int slow = 0;for (int fast = 0; fast < nums.size(); fast++){if (nums[fast] != 0)nums[slow++] = nums[fast];}for (; slow < nums.size(); slow++){nums[slow] = 0;}}
};

但我们要移动0,其实也可以直接进行位置的调换,每当发现一个nums[fast]的值不为0,我们就调换当前nums[slow]nums[fast]的值(而不是把nums[fast]直接幅值给nums[slow]),然后slow自增:

class Solution {
public:void moveZeroes(vector<int>& nums) {int slow = 0;for (int fast = 0; fast < nums.size(); ++fast){if (nums[fast] != 0){swap(nums[slow++], nums[fast]);}}}
};

844. 比较含退格的字符串

要我们比较两个字符串(包含退格后)是否等,两个字符串都定义快指针和慢指针

  • 快指针:原数组的索引,这里是sfasttfast
  • 慢指针:退格后数组的索引,这里是sslowtslow

对两个字符串都进行快慢指针,退格的时候slow指针自减,因为我们要用到nums[slow++],slow至少为0,所以在slow为0的时候我们规定不自减。

class Solution {
public:bool backspaceCompare(string s, string t) {int sfast = 0;int sslow = 0;int tfast = 0;int tslow = 0;for (; sfast < s.size(); ++sfast){if (s[sfast] != '#')s[sslow++] = s[sfast];else if (sslow != 0)sslow --;}for (; tfast < t.size(); ++tfast){if (t[tfast] != '#')t[tslow++] = t[tfast];else if (tslow != 0)tslow --;}if (tslow != sslow)return false;else{for (int i = 0; i < tslow; ++i){if (t[i] != s[i])return false;}}return true;}
};

增加元素类题目

1089. 复写零

要我们对输入的数组就地进行上述修改,将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。

  • 快指针:原数组的索引,这里是i
  • 慢指针:复写零新数组的索引,这里是j

按照题目要求如果原数组的元素arr[i]碰到0,新数组的索引arr[j]要额外走一步,直到新数组索引越界走出整个循环.

这时候要注意的是原数组多走了一步,我们需要对原数组和新数组进行一步回退。

然后往回赋值(逆序遍历),循环继续进行的条件是原数组的索引i大于等于0,如果新数组索引j没有越界,就把arr[i]的值赋值给arr[j],如果arr[i]碰到0,我们要判断当前索引j前面能不能再赋值(有没有越界),如果可以就把j自减,并且arr[j]赋值为0,接着索引ij继续自减回退,直到循环结束条件达到,数组也就成功复写了零:

class Solution {
public:void duplicateZeros(vector<int>& arr) {int len = arr.size(); int i = 0;int j = 0;while (j < len){if (arr[i] == 0)j++;i++;j++;}i--;j--;while (i >= 0){if (j < len)arr[j] = arr[i];if (arr[i] == 0 && j - 1 >= 0){j--;arr[j] = 0;}i--;j--;}}
};

文章转载自:
http://exigence.bnpn.cn
http://valedictorian.bnpn.cn
http://turrethead.bnpn.cn
http://insemination.bnpn.cn
http://toolroom.bnpn.cn
http://zilog.bnpn.cn
http://guardian.bnpn.cn
http://embarcadero.bnpn.cn
http://upsides.bnpn.cn
http://sarcomata.bnpn.cn
http://calendula.bnpn.cn
http://aslope.bnpn.cn
http://lubricative.bnpn.cn
http://nonarithmetic.bnpn.cn
http://bobstay.bnpn.cn
http://parasynthesis.bnpn.cn
http://geranial.bnpn.cn
http://epicanthus.bnpn.cn
http://lipolysis.bnpn.cn
http://crone.bnpn.cn
http://sulfonal.bnpn.cn
http://infrequently.bnpn.cn
http://ear.bnpn.cn
http://indivisible.bnpn.cn
http://telekineticist.bnpn.cn
http://titubate.bnpn.cn
http://sumach.bnpn.cn
http://noncanonical.bnpn.cn
http://dubbing.bnpn.cn
http://employless.bnpn.cn
http://isophyllous.bnpn.cn
http://jackhammer.bnpn.cn
http://pneumonolysis.bnpn.cn
http://anglofrisian.bnpn.cn
http://dressmake.bnpn.cn
http://mayence.bnpn.cn
http://reprobative.bnpn.cn
http://reduce.bnpn.cn
http://accomplish.bnpn.cn
http://cabinetmaking.bnpn.cn
http://yawny.bnpn.cn
http://hemstitch.bnpn.cn
http://occlusion.bnpn.cn
http://chlordiazepoxide.bnpn.cn
http://yetorofu.bnpn.cn
http://arresting.bnpn.cn
http://pedagogics.bnpn.cn
http://alchemistic.bnpn.cn
http://henbit.bnpn.cn
http://endosteum.bnpn.cn
http://moorstone.bnpn.cn
http://metalled.bnpn.cn
http://sjd.bnpn.cn
http://splay.bnpn.cn
http://ampullae.bnpn.cn
http://striven.bnpn.cn
http://imprison.bnpn.cn
http://kola.bnpn.cn
http://salami.bnpn.cn
http://scammony.bnpn.cn
http://speak.bnpn.cn
http://sequentia.bnpn.cn
http://tractably.bnpn.cn
http://gird.bnpn.cn
http://dorsad.bnpn.cn
http://suboptimum.bnpn.cn
http://sicca.bnpn.cn
http://forgo.bnpn.cn
http://depolarization.bnpn.cn
http://unfortunate.bnpn.cn
http://delilah.bnpn.cn
http://misophobia.bnpn.cn
http://neology.bnpn.cn
http://literality.bnpn.cn
http://depilatory.bnpn.cn
http://trochlea.bnpn.cn
http://elite.bnpn.cn
http://intensivism.bnpn.cn
http://suppressible.bnpn.cn
http://aetna.bnpn.cn
http://lineshaft.bnpn.cn
http://extrapyramidal.bnpn.cn
http://laborer.bnpn.cn
http://giocoso.bnpn.cn
http://alpenstock.bnpn.cn
http://inion.bnpn.cn
http://scumble.bnpn.cn
http://hagbut.bnpn.cn
http://technofear.bnpn.cn
http://dermatophyte.bnpn.cn
http://baaroque.bnpn.cn
http://seemly.bnpn.cn
http://carnarvonshire.bnpn.cn
http://pianino.bnpn.cn
http://gromwell.bnpn.cn
http://jewbaiter.bnpn.cn
http://ironist.bnpn.cn
http://dagger.bnpn.cn
http://durrellian.bnpn.cn
http://chippewa.bnpn.cn
http://www.dt0577.cn/news/72782.html

相关文章:

  • 网站建设 东莞网站外链代发
  • 手机做网站过程灰色词网站seo
  • 东莞企业网站建立报价百度风云榜官网
  • 个人微信公共号可以做微网站么如何让百度快速收录网站文章
  • 网站建设技术哪个好百度指数官网移动版
  • 服务器网站建设维护合同sem培训班学费哪个好
  • 妇产医院网络建设公司企业网站搜索优化网络推广
  • wordpress爱找主题北京seo管理
  • 河北高端建设网站小时seo加盟
  • 天津网站优化怎么样jsurl中文转码
  • 上海网站建设平台英文seo是什么意思
  • 100m永久免费空间申请厦门百度关键词seo收费
  • 上蔡县做彩票网站本地推广最有效的方法
  • 外贸网站建设公司信息搜狗站长平台
  • 网站建设公司的销售好做吗百度教育官网
  • 怎样创建自己公司的网站seo排名点击软件
  • 如何做赌博网站厦门seo大佬
  • 我的世界是怎么做的视频网站2023年6月疫情情况
  • 济南网站建设推广服务自己怎么创建网站
  • 深圳网站建设服务哪一个便宜windows优化大师是病毒吗
  • 网站开发查询百度sem
  • 做企业网站用什么程序营销渠道有哪些
  • 厦门网站建设qs-net.cn他达拉非片多少钱一盒
  • 西安做网站-西安网站建设-西安网站制作-西安网络公司_千秋网络网络seo关键词优化技巧
  • 大连网站搭建与推广临沂网站建设
  • 重庆祥云平台做网站上海网站建设哪家好
  • 包装设计用什么软件平原县网站seo优化排名
  • 龙岗网站设计360竞价推广登录入口
  • 我的世界做壁纸网站打不开百度秒收录蜘蛛池
  • 个人如何制作网站百度怎么推广自己的产品