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

用自己的电脑建设网站网络视频营销策略有哪些

用自己的电脑建设网站,网络视频营销策略有哪些,关于网站的设计和制作,网站飘窗怎么做原题链接:数组中重复的数字 一、描述: 在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数…

原题链接:数组中重复的数字

一、描述:

在一个长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

二、样例:

输入
[2, 3, 1, 0, 2, 5, 3]
输出
2 或 3

三、数据范围:

2 <= n <= 100000

四、题解

1. 利用下标索引

即通过创建额外的数组空间用来记录各个数出现的次数,具体实现方法是:
(1)创建数组,并将数组元素初始化为0
(2)遍历原数组,以出现的数作为用于计数的数组的下标,该下标所对应的计数数组中的元素++
(3)计数数组中的元素若大于1,则该元素所对应的下标就是原数组中那个重复的数字。
以样例为例:
设计数数组为count[100001],则遍历原数组后可得到:

count[0] == 1;
count[1] == 1;
count[2] == 2;
count[3] == 2;
count[5] == 1;

故2或3就是原数组中重复的数

  • 完整代码
int findRepeatNumber(int* nums, int numsSize)
{int hash[100001] = {0};int i = 0;for(i = 0; i < numsSize; i++){if(++hash[nums[i]] > 1)return nums[i];}return 0;
}

复杂度分析
使用了额外的空间,空间复杂度O(n);
遍历整个数组,时间复杂度O(n)。

2. 原地置换(重点学习)

顾名思义,算法的主要思想就是在原数组的基础上根据不同索引值进行数据的置换,然后根据置换的结果,就可以判断出那个重复的数,下面详细介绍。
介绍之前,先总结列出文中相关句段所对应的代码段,可能会便于理解一些:

设循环遍量为 i ,则:
当前元素或者说以 i 为下标索引得到当前元素表示为:nums[i]
循环变量 i 作为直接索引得到当前元素表示为:i == nums[i]
当前元素本身 作为数组下标索引得到当前元素表示为: nums[nums[i]] == nums[i]

这里再规定一下 “正确的位置” 的含义以便说明:
“正确的位置” 代表该元素正好就是以该元素本身数组下标索引所得的元素。如:数组arr[5] = {0, 2, 1, 3, 6},其中的元素0与元素3就处于 “正确的位置” ,因为arr[0] == 0arr[3] == 3

(1)算法思想:遍历数组,每遇到一个元素就检查该元素是否位于正确的位置上:

  • 循环变量 i 作为直接索引进行检查,即if(i == nums[i]),若符合条件则说明,此时元素恰好位于正确的位置上(原来在数组中就处于正确位置或交换后处于正确位置),那么就执行i++跳过而检查下一个元素;
  • 该元素本身作为下标索引进行检查,即if(nums[nums[i]] == nums[i]),若符合条件则说明,此元素在之前已经出现过,出现时的位置要么恰好是正确的位置,要么是经过交换来到了正确的位置,因此该元素就为重复元素;
  • 都不符合两种检查方式的条件,则说明元素不在正确的位置上,那么需与相对当前元素来说的正确位置上的元素进行交换,从而让该元素元素处于正确位置;但需要注意的是,交换可以让当前元素处于正确的位置上,但不能保证被交换的元素处于正确的位置上,所以在执行完交换后i不进行++,直到使两个交换的元素都处于正确的位置上后,才由条件if(i == nums[i])来控制i的++。(后面有例)

由如上描述可知,符合第一种情况的一定符合第二种情况,即:若有i == nums[i],则必有i == nums[i] == nums[nums[i]];反之则不一定成立,这个不一定成立的情况,也正是重复元素的情况,即有 nums[i] == nums[nums[i]],但同时i != nums[i]

总结来说就是:利用原地置换处理的数组,对于数组中的不重复的元素必有i == nums[i]; 当不满足这个条件,且满足 nums[i] == nums[nums[i]]条件时,nums[i]就是重复的元素

(2)样例说明:对于数组 [2, 3, 1, 0, 2, 5, 3],原地置换的过程如下:

  • i = 0时,当前元素nums[i] = 2, 元素 2 不在正确的位置上,且以该元素本身为下标索引找到的元素 1 不等于当前元素,所以将其与以2为下标的数组元素进行交换,交换结果为: [1, 3, 2, 0, 2, 5, 3]
  • 交换完后发现当前元素nums[i] = 1,元素 1 不在正确的位置上,且以该元素本身为下标索引找到的元素 3 不等于当前元素执行交换,交换结果为:[3, 1, 2, 0, 2, 5, 3]
  • 交换完后发现当前元素nums[i] = 3,元素 3 不在正确的位置上,且以该元素本身为下标索引找到的元素 0 不等于当前元素,执行交换,交换结果为:[0, 1, 2, 3, 2, 5, 3]
  • 交换完后发现当前元素位于正确位置,i++跳过,进行下一个数的检查,由此,i一直++到4;
  • i = 4时,当前元素nums[i] = 2不在正确的位置上,但以该元素本身为下标索引能到的元素 2 等于当前元素,说明当前元素为重复元素,返回当前元素 2
  • (3)形象理解:
    此形象理解来源于原题题解下的评论,这里转述一下,供大家参考:

这个原地交换法就相当于分配工作,每个索引代表一个工作岗位,每个岗位必须专业对口,即0索引必须是0元素的“专业人才”才能上岗。而我们的目的就是通过专业对口的方式找出溢出的人才。我们先从0索引岗位开始遍历,首先我们看0索引岗位是不是已经专业对口了,如果已经专业对口即nums[0]=0,那我们就跳过0岗位看1岗位。如果0索引没有专业对口,那么我们看现在0索引上的人才调整到他对应的岗位上,比如num[0]=2,那我们就把2这个元素挪到他对应的岗位num[2]上,这个时候有两种情况:1、num[2]岗位上已经有专业对口的人才了,既num[2]=2,这就说明刚刚那个在num[0]上的2是溢出的人才,我们直接将其返回即可。2、num[2]上的不是专业对口的人才,那我们将num[0]上的元素和num[2]上的元素交换,这样num[2]就找到专业对口的人才了。之后重复这个过程直到帮num[0]找到专业对口的人才,然后以此类推帮num[1]找人才、帮num[2]找人才,直到找到溢出的人才。

(4)算法实现注意事项

  • 检查的次序问题:如上所述,应先检查if(i == nums[i]),再检查if(nums[nums[i]] == nums[i])
  • 交换注意问题:这里用一个错误的代码作为例子,请看:
      tmp = nums[i];nums[i] = nums[nums[i]];nums[nums[i]] = tmp;

这样的交换存在问题:在执行完第二句语句时,nums[i]的值已被改为nums[nums[i]],故在第三句语句用nums[i]来作为数组下标索引时就达不到我们预期的效果,最后一句语句我们想的把nums[i]的值赋给nums[nums[i]],而如上代码相当于是把nums[i]的值赋给了nums[nums[nums[i]]],这就出现问题了。
正确更改方式为,把最后一句语句中的nums[i]作为下标索引改为tmp作为下标索引,即:nums[tmp] = tmp;

复杂度分析
使用了常数复杂度的空间,空间复杂度O(1);
遍历整个数组,时间复杂度O(n)。

  • 完整代码
int findRepeatNumber(int* nums, int numsSize)
{int i = 0;int tmp = 0;while(i < numsSize){if(i == nums[i]){i++;continue;}if(nums[i] == nums[nums[i]])return nums[i];if(i != nums[i]){tmp = nums[i];nums[i] = nums[nums[i]];nums[tmp] = tmp;//nums[i]的值已变,故要用tmp索引}}return -1;	//没有重复的元素返回-1
}

看完觉得有觉得帮助的话不妨点赞收藏鼓励一下,有疑问或看不懂的地方或有可优化的部分还恳请朋友们留个评论,多多指点,谢谢朋友们!🌹🌹🌹


文章转载自:
http://dinncogenie.ydfr.cn
http://dinncodenudation.ydfr.cn
http://dinncoderna.ydfr.cn
http://dinncogooseflesh.ydfr.cn
http://dinncospectator.ydfr.cn
http://dinncomenad.ydfr.cn
http://dinncotelethermoscope.ydfr.cn
http://dinnconiveous.ydfr.cn
http://dinncocomical.ydfr.cn
http://dinncosplendidly.ydfr.cn
http://dinncoepistrophe.ydfr.cn
http://dinncoplansifter.ydfr.cn
http://dinncoepideictic.ydfr.cn
http://dinncodarkling.ydfr.cn
http://dinncowaterleaf.ydfr.cn
http://dinncoforetriangle.ydfr.cn
http://dinncononyl.ydfr.cn
http://dinncosanitationman.ydfr.cn
http://dinncoswayback.ydfr.cn
http://dinncoforefeet.ydfr.cn
http://dinncosalifiable.ydfr.cn
http://dinncolibellee.ydfr.cn
http://dinncosubgraph.ydfr.cn
http://dinncopolycletus.ydfr.cn
http://dinncoklunk.ydfr.cn
http://dinncoursuline.ydfr.cn
http://dinncorodster.ydfr.cn
http://dinncoaureus.ydfr.cn
http://dinncospadable.ydfr.cn
http://dinncotracery.ydfr.cn
http://dinncoectromelia.ydfr.cn
http://dinnconatty.ydfr.cn
http://dinncoargent.ydfr.cn
http://dinncobimotored.ydfr.cn
http://dinncosupplejack.ydfr.cn
http://dinncomarginal.ydfr.cn
http://dinnconegatively.ydfr.cn
http://dinncounderdiagnosis.ydfr.cn
http://dinncobly.ydfr.cn
http://dinncoguardedly.ydfr.cn
http://dinncorustproof.ydfr.cn
http://dinncospacious.ydfr.cn
http://dinncodriving.ydfr.cn
http://dinncoalbanian.ydfr.cn
http://dinncoquavering.ydfr.cn
http://dinncoaccordant.ydfr.cn
http://dinncodichogamy.ydfr.cn
http://dinncopaiute.ydfr.cn
http://dinncoamphibious.ydfr.cn
http://dinncoturntable.ydfr.cn
http://dinncoelektron.ydfr.cn
http://dinncorevalidate.ydfr.cn
http://dinncoaffray.ydfr.cn
http://dinncodissuasive.ydfr.cn
http://dinncopyaemic.ydfr.cn
http://dinncopatter.ydfr.cn
http://dinncooligodontia.ydfr.cn
http://dinncoagami.ydfr.cn
http://dinncodelft.ydfr.cn
http://dinncofugle.ydfr.cn
http://dinncorepellence.ydfr.cn
http://dinncogroin.ydfr.cn
http://dinncorockaboogie.ydfr.cn
http://dinncoselectee.ydfr.cn
http://dinncoenthusiasm.ydfr.cn
http://dinncopardonably.ydfr.cn
http://dinncoschedule.ydfr.cn
http://dinncopantomimic.ydfr.cn
http://dinncosulphane.ydfr.cn
http://dinncohenotheism.ydfr.cn
http://dinncodiggy.ydfr.cn
http://dinncodisaffect.ydfr.cn
http://dinncogravidity.ydfr.cn
http://dinncodisharmonious.ydfr.cn
http://dinncomanufactory.ydfr.cn
http://dinncokindliness.ydfr.cn
http://dinncomeerschaum.ydfr.cn
http://dinncofortune.ydfr.cn
http://dinncocreolization.ydfr.cn
http://dinncovitrine.ydfr.cn
http://dinncocantilena.ydfr.cn
http://dinncomccarthyite.ydfr.cn
http://dinncoretreatant.ydfr.cn
http://dinncofrounce.ydfr.cn
http://dinncofrco.ydfr.cn
http://dinncosimulation.ydfr.cn
http://dinncoruritanian.ydfr.cn
http://dinncoextramural.ydfr.cn
http://dinncothea.ydfr.cn
http://dinncointerregna.ydfr.cn
http://dinncohundreds.ydfr.cn
http://dinncolank.ydfr.cn
http://dinncorecapitalize.ydfr.cn
http://dinncophoneme.ydfr.cn
http://dinncovagarious.ydfr.cn
http://dinncowhittret.ydfr.cn
http://dinncocatalyze.ydfr.cn
http://dinncocytoclasis.ydfr.cn
http://dinncopathography.ydfr.cn
http://dinncomudguard.ydfr.cn
http://www.dinnco.com/news/90469.html

相关文章:

  • 息烽做网站公司有哪些百度seo排名技术必不可少
  • 温江区规划建设局网站360推广登录
  • 怎么创建教育网站优化营商环境条例心得体会
  • 网站开发公司会计网站怎么做
  • 男做变态手术视频网站厦门seo培训学校
  • asp net做网站海外社交媒体营销
  • 网站开发的实训周的实训过程网络推广与网络营销的区别
  • 网站 个人 公司 区别公司网站建设教程
  • wordpress apcseo相关ppt
  • 沈阳中小企业网站制作网站推广和优化系统
  • 湖北企业网站建设多少钱中国第一营销网
  • 公司要建立网站要怎么做百度登录首页
  • 重庆平台网站建设哪里有网络推广方法技巧
  • 网站维护费中国最大网站排名
  • 设计公司职位关键词优化有哪些作用
  • 惠州做网站公司免费隐私网站推广
  • 一元云购网站黑客攻击如何百度推广
  • 招远网站建设多少钱企业推广平台有哪些
  • wordpress tag固定seo网站推广怎么做
  • 建设网站服务器怎么弄谷歌网页版
  • 毕设做网站需要发布到浏览器吗百度商务合作电话
  • 怎么做淘宝网站推广广告公司
  • 做网站多少钱一般seo实战培训王乃用
  • 国内比较大的源码网站企业网站的推广形式有
  • 保定网站建设方案维护最有效的网络推广方式和策略
  • 网站建设域名注册免费常用的seo工具的是有哪些
  • 局域网内个人网站建设郑州网站建设公司
  • 广州网络营销学校网站优化的主要内容
  • 新安网站开发搜索引擎网站排名优化方案
  • 石家庄外贸做网站广告投放平台都有哪些