704.二分查找

题目链接:二分查找

思路:

1.从头开始遍历,首先如果不用二分查找法,最容易想到的就是直接暴力查找,时间复杂度为O(n)直接从头开始遍历一便就行。这样如果数据量庞大会运行时间较长。

2.二分法,时间复杂度为O(logn),相比暴力解运行速度会更快,二分法编写时,需要注意每一次查找时的左右两个端点,和前提条件。
(1)左闭右闭区间,左右端点都可以取到
·while(left<=right)
·每一次二分后,若target在左边区间,则right=mid-1,若target在右边区间,则left=mid+1。
(2)左闭右开区间,只有左端点可以取到
·while(left<right)
·每一次二分后,若target在左边区间,则right=mid,若target在右边区间,则left=mid+1。

暴力解代码

int search(int* nums, int numsSize, int target){/*暴力解*/    int i=0;for(;i<numsSize;i++){if(*(nums+i)==target)break;}if(i==numsSize)return -1;else return i;
}

二分法代码

左闭右闭区间
int search(int* nums, int numsSize, int target){int left=0,right=numsSize-1;int mid=(left+right)/2;int flag=0;while(left<=right){mid=(left+right)/2;if(target>nums[mid])left=mid+1;else if(target<nums[mid])right=mid-1;else if(target==nums[mid])return mid;}return -1;
}
左闭右开区间
int search(int* nums, int numsSize, int target){int left=0,right=numsSize-1;int mid=(left+right)/2;while(left<right){mid=(left+right)/2;if(target>nums[mid])left=mid+1;//left取得到得,要mid+1,else if(target<nums[mid])right=mid;//right是取不到的可以直接等于midelse if(target==nums[mid])return mid;}return -1;
}

27.移除元素

题目链接移除元素

思路:

1.暴力解法,从头到尾遍历数组,只要发现要移除的目标元素,就开始从该位置后一位开始依次往前进行覆盖,每覆盖完一轮就数组长度减1。

2.双指针法(快慢指针法),即用两个下标,分别称为slow下标和quick下标,slow用来标记最后剔除目标元素的新数组下标,quick用来遍历整个数组,找到非目标元素,存入到slow下标的元素位置,每次quick指的是非目标元素,就nums[slow++]=nums[quick]

暴力解代码

int removeElement(int* nums, int numsSize, int val){for(int i=0;i<numsSize;i++){if(nums[i]==val){for(int j=i+1;j<numsSize;j++)nums[j-1]=nums[j];i--;//因为后面的往前面覆盖了numsSize--;}}return numsSize;
}

双指针法代码

int removeElement(int* nums, int numsSize, int val){int slow=0;for(int quick=0;quick<numsSize;quick++){if(nums[quick]!=val){ nums[slow++]=nums[quick];}} return slow;
}

今日总结:

两道题目一开始,我想都没想全用的暴力解,然后第一道题目的二分法,我写起来完全错误,大方向思路知道,但是一些关键核心代码写错了,尤其是while循环里面忘记写每一次二分后的mid式子了。。。。。。第二道题,双指针法一开始没搞懂,后面看视频懂的,简洁说就是,不是目标元素的跳过不写入“新”数组,是目标元素的跳过。今天两道题是完全弄懂了,清清楚楚,明明白白

代码随想录算法训练营第一天 | 704.二分查找、27.移除元素题目相关推荐

  1. 代码随想录算法训练营第一天|704二分查找 27移除元素

    理论基础 1.数组是存放在连续内存空间上的相同类型数据的集合 2.数组可以方便的通过下标索引的方式获取到下标下对应的数据 3.数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要 ...

  2. 代码随想录算法训练营第一天 704 二分查找、27 移除元素

    代码随想录算法Day1 | 704. 二分查找.27. 移除元素 Last edited time: April 5, 2023 11:27 AM 数据理论基础 数组是存放在连续内存空间上的相同类型数 ...

  3. 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。

    704. 二分查找 题目链接:704. 二分查找 - 力扣(LeetCode) 第一天代码跑题了,做出来了但是没有使用二分法,看了讲解,对于左闭右闭和左闭右开还需要多思考,并没有完全理解.那就先总结一 ...

  4. 代码随想录Day01:数组理论基础、二分查找、移除元素

    目录 数组理论基础.二分查找.移除元素 1.数组理论基础 2.Leetcode704.二分查找 方法一 左闭右闭: 方法二 左闭右开: 方法三 左开右开: 方法四 左开右闭: 3.Leetcode27 ...

  5. Leetcode 704.二分查找 27.移除元素 代码随想录day1

    本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...

  6. day1 704.二分查找 27.移除元素

    文章目录 704.二分查找 思路 代码实现 27.移除元素 思路 代码实现 704.二分查找 题目链接:704.二分查找 思路 使用二分法的前提条件: 1.有序数组 2.无重复元素 代码实现 左闭右闭 ...

  7. 代码修炼Day1_LeetCode704二分查找27移除元素

    代码修炼Day1_LeetCode704二分查找&27移除元素 一些数组基本知识 数组下标都是从0开始的 数组内存空间的地址是连续的 题目链接: 力扣704二分查找 二分查找思想 针对升序数组 ...

  8. 代码随想录算法训练营第一天 | 数组理论基础,704. 二分查找,27. 移除元素

    今日学习的文章链接如下: 代码随想录 (programmercarl.com) 代码随想录 (programmercarl.com) 704. 二分查找 自己看到题目的第一想法 拿到题目首先想办法,一 ...

  9. 代码随想录算法训练营第一天

    704. 二分查找. 27. 移除元素 1. 二分查找 int search(int* nums, int numsSize, int target){int middle = 0;int left ...

最新文章

  1. [转]Struts 2.1发布
  2. 报告:美国AI投资占全球56% 中国第二增长最快
  3. [导入]微软CSS,GCR半日游--学了一样东西,什么叫做灰头土脸
  4. RabbitMQ——安装
  5. k8s服务网关ambassador部署
  6. 好文|张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  7. java 画金刚石_帮忙改错!java 画金刚石
  8. 软件测试工程师怎么样面试上好的公司?
  9. 彻底明白Java的IO系统
  10. eclipse windowJAVA版64位安装教程
  11. 如何将FPGA程序固化到外部Flash存储器
  12. 【洛谷P1606】白银莲花池【最短路】
  13. 春天开始Spring
  14. php中下载xls某个文件,php下载excel文件
  15. ARP代理(善意的欺骗)
  16. 大咖分享|李志强:一文详解标签类目体系落地方法与建设价值
  17. 最新版本Portraiture4.1中文版ps磨皮滤镜插件安装包
  18. 用户活跃、留存、增长分析,超全图解!
  19. JAVA 软加密之加密和校验过程图
  20. 写给大忙人看的进程和线程

热门文章

  1. Mysql中实现全外连接
  2. 【hive日期函数】hive常用日期函数+扩展
  3. 详解Java 8十大新特性
  4. springboot整合webmagic动态爬取网页
  5. Android利用GridView加载九宫格菜单
  6. mysql数据库密码
  7. 面向对象——设计模式
  8. 趣味幽默 程序员使用说明书
  9. 儿童节,却有超过6000万的儿童无人陪伴
  10. 网络对抗技术-Exp5-信息搜集与漏洞扫描 20181314