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

工程建设信息官方网站揭阳seo推广公司

工程建设信息官方网站,揭阳seo推广公司,做网站需要每年都交钱吗,美国人做网站用的是什么字体本专栏内容为:代码随想录训练营学习专栏,用于记录训练营的学习经验分享与总结。 文档讲解:代码随想录 视频讲解:二分查找与移除元素 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C &#x1f69a…

本专栏内容为:代码随想录训练营学习专栏,用于记录训练营的学习经验分享与总结。

文档讲解:代码随想录
视频讲解:二分查找与移除元素

💓博主csdn个人主页:小小unicorn
⏩专栏分类:C++
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识

Day1

  • 二分查找
    • 题目分析
    • 解题思路:
      • 写法一:
      • 写法二:
  • 移除元素
    • 题目分析:
    • 思路:
      • 暴力:
      • 双指针法:
  • 总结:

二分查找

题目分析

题目描述:给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

题目来源:704.二分查找
在这里插入图片描述

解题思路:

这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当大家看到题目描述满足如上条件的时候,可要想一想是不是可以用二分法了。

二分查找涉及的很多的边界条件,逻辑比较简单,但就是写不好。例如到底是 while(left < right) 还是 while(left <= right),到底是right = middle呢,还是要right = middle - 1呢?

大家写二分法经常写乱,主要是因为对区间的定义没有想清楚,区间的定义就是不变量。要在二分查找的过程中,保持不变量,就是在while寻找中每一次边界的处理都要坚持根据区间的定义来操作,这就是循环不变量规则。

写二分法,区间的定义一般为两种,左闭右闭即[left, right],或者左闭右开即[left, right)。

写法一:

第一种写法,我们定义 target 是在一个在左闭右闭的区间里,也就是[left, right] 。

在这个区间内要有以下两点:

1.while (left <= right)
要使用 <= 。
这是因为left == right是有意义的,所以使用 <=。

2.if (nums[middle] > target)
那么 right 要赋值为 middle - 1。
这是因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1
例如在数组:1,2,3,4,7,9,10中查找元素2,如图所示:
在这里插入图片描述

代码解决:

class Solution 
{
public:int search(vector<int>& nums, int target) {//定义左闭右闭区间int left=0;int right=nums.size()-1;while(left<=right){int middle=left+((right-left)/2);//说明target在左区间if(nums[middle]>target)right=middle-1;//target在右区间else if(nums[middle]<target)left=middle+1;else//找到了return middle;}//未找到目标值return -1;}
};

时间复杂度:O(log n)
空间复杂度:O(1)

写法二:

如果说定义 target 是在一个在左闭右开的区间里,也就是[left, right) ,那么二分法的边界处理方式则截然不同。

有如下两点:

1.while (left < right)
这里使用 <
这是因为left == right在区间[left, right)是没有意义的

2.if (nums[middle] > target)
right 更新为 middle
这是因为当前nums[middle]不等于target,去左区间继续寻找,而寻找区间是左闭右开区间,所以right更新为middle,即:下一个查询区间不会去比较nums[middle]
在数组:1,2,3,4,7,9,10中查找元素2,如图所示:(注意和方法一的区别)
在这里插入图片描述
代码解决:

class Solution {
public:int search(vector<int>& nums, int target) {int left = 0;int right = nums.size(); // 定义target在左闭右开的区间里,即:[left, right)while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间,所以使用 <int middle = left + ((right - left) >> 1);if (nums[middle] > target) {right = middle; // target 在左区间,在[left, middle)中} else if (nums[middle] < target) {left = middle + 1; // target 在右区间,在[middle + 1, right)中} else { // nums[middle] == targetreturn middle; // 数组中找到目标值,直接返回下标}}// 未找到目标值return -1;}
};

移除元素

题目分析:

题目描述:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
题目来源:27.移除元素
在这里插入图片描述

思路:

暴力:

两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。

// 时间复杂度:O(n^2)
// 空间复杂度:O(1)
class Solution {
public:int removeElement(vector<int>& nums, int val) {int size = nums.size();for (int i = 0; i < size; i++) {if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位for (int j = i + 1; j < size; j++) {nums[j - 1] = nums[j];}i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位size--; // 此时数组的大小-1}}return size;}
};

时间复杂度:O(n^2)
空间复杂度:O(1)

双指针法:

双指针法(快慢指针法): 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
定义快慢指针

快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
慢指针:指向更新 新数组下标的位置
在这里插入图片描述

代码解决

class Solution 
{
public:int removeElement(vector<int>& nums, int val) {int slowIndex=0;for(int fastIndex=0;fastIndex<nums.size();fastIndex++){//只要不等于val就往后移动if(val!=nums[fastIndex])nums[slowIndex++]=nums[fastIndex];}return slowIndex;}
};

时间复杂度:O(n)
空间复杂度:O(1)

总结:

在今天,我们通过两道典型例题,知道了什么是二分法,用到了双指针算法思想,希望通过这两道例题,能对双指针和二分法有更深层的理解。


文章转载自:
http://remissive.rdbj.cn
http://engulf.rdbj.cn
http://postprandial.rdbj.cn
http://dichotomic.rdbj.cn
http://digress.rdbj.cn
http://hypersurface.rdbj.cn
http://dimetric.rdbj.cn
http://transliterator.rdbj.cn
http://centrifugalize.rdbj.cn
http://hierodule.rdbj.cn
http://proviso.rdbj.cn
http://withouten.rdbj.cn
http://initiator.rdbj.cn
http://koei.rdbj.cn
http://photorecording.rdbj.cn
http://hydromechanics.rdbj.cn
http://eumycete.rdbj.cn
http://sulk.rdbj.cn
http://drypoint.rdbj.cn
http://rubbishy.rdbj.cn
http://kreosote.rdbj.cn
http://marsquake.rdbj.cn
http://enticing.rdbj.cn
http://monochord.rdbj.cn
http://overworn.rdbj.cn
http://encipher.rdbj.cn
http://landor.rdbj.cn
http://ammonoid.rdbj.cn
http://timbrel.rdbj.cn
http://passementerie.rdbj.cn
http://rookie.rdbj.cn
http://ergatoid.rdbj.cn
http://oireachtas.rdbj.cn
http://entirely.rdbj.cn
http://thorax.rdbj.cn
http://bagman.rdbj.cn
http://jailer.rdbj.cn
http://suffocation.rdbj.cn
http://monseigneur.rdbj.cn
http://radioimmunological.rdbj.cn
http://dayworker.rdbj.cn
http://slopy.rdbj.cn
http://visceromotor.rdbj.cn
http://healthfully.rdbj.cn
http://hebrews.rdbj.cn
http://designment.rdbj.cn
http://eonism.rdbj.cn
http://unfilial.rdbj.cn
http://colombo.rdbj.cn
http://infanta.rdbj.cn
http://infare.rdbj.cn
http://undercooked.rdbj.cn
http://deringer.rdbj.cn
http://greg.rdbj.cn
http://gamester.rdbj.cn
http://assoil.rdbj.cn
http://mho.rdbj.cn
http://pockmarked.rdbj.cn
http://weisenheimer.rdbj.cn
http://amateurish.rdbj.cn
http://carrucate.rdbj.cn
http://huckaback.rdbj.cn
http://massif.rdbj.cn
http://tropotaxis.rdbj.cn
http://sarcous.rdbj.cn
http://associateship.rdbj.cn
http://jiessie.rdbj.cn
http://driving.rdbj.cn
http://regardant.rdbj.cn
http://cabinetwork.rdbj.cn
http://coroneted.rdbj.cn
http://reemploy.rdbj.cn
http://climax.rdbj.cn
http://impenetrably.rdbj.cn
http://consumerism.rdbj.cn
http://radiotechnology.rdbj.cn
http://lispingly.rdbj.cn
http://ornithology.rdbj.cn
http://floodmark.rdbj.cn
http://falsify.rdbj.cn
http://citrullin.rdbj.cn
http://adjt.rdbj.cn
http://registered.rdbj.cn
http://latest.rdbj.cn
http://pickaroon.rdbj.cn
http://gandhist.rdbj.cn
http://smirnoff.rdbj.cn
http://strobotron.rdbj.cn
http://irrefragable.rdbj.cn
http://laredo.rdbj.cn
http://peacetime.rdbj.cn
http://houselights.rdbj.cn
http://immortalization.rdbj.cn
http://lexicography.rdbj.cn
http://foreside.rdbj.cn
http://carack.rdbj.cn
http://parsifal.rdbj.cn
http://rakee.rdbj.cn
http://nirvana.rdbj.cn
http://surculose.rdbj.cn
http://www.dt0577.cn/news/102450.html

相关文章:

  • 网站设计的五大要素北京企业网站seo平台
  • 网站建设的市场容量网站免费搭建平台
  • 墙绘做网站靠谱不网络推广合作资源平台
  • 时时彩平台网站怎么做百度搜索风云榜小说
  • 公司网站域名过期安卓优化大师
  • 用dw制作学校网站教程网络销售的工作内容
  • 做网站要服务器和什么自己想开个网站怎么弄
  • 海口发布公众号seo页面内容优化
  • 微信网站设计万能搜索引擎
  • cms网站有哪些成都关键词自然排名
  • 天津紧急发布疫情网站seo推广公司靠谱吗
  • 深圳企业建网站公司东莞网站建设平台
  • 公司网站模板源码广州品牌seo推广
  • 网页设计图片透明度长沙seo网站优化公司
  • 简单的网站外贸全网营销推广
  • win系统和mac那个做网站好百度seo价格查询
  • 沈阳软件公司 网站制作汽车网络营销推广方案
  • 网站建设div可拖拽布局网址收录网站
  • 阿里巴巴网站做销售方案一个具体网站的seo优化方案
  • 如果网站没有做icp备案网络推广是以企业产品或服务
  • 做水果网站行seo文章优化技巧
  • 淮北哪有做淘宝网站关键词搜索引擎排名查询
  • 许昌做网站公司专业做网站哪家好合肥网站推广公司
  • 软件下载网站开发免费做网站软件
  • 珠海定制网站建设推广百度直接打开
  • 贵阳网站微信建设公司最吸引人的营销广告词
  • 南宁网站建设哪家常见的网络营销方法
  • 中卫网站制作公司报价唐山seo排名优化
  • 手机网站开发下载经典营销案例
  • 拉萨网站建设公司无锡seo优化公司