草庐IT

day1-数组part01| 704. 二分查找、27. 移除元素

数组理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标从0开始数组内存空间的地址是连续的c++中vector和array的区别1、vector是顺序容器,其利用连续的内存空间来存储元素,但是其内存空间大小是能够改变的。2、array是顺序容器,其也是利用连续的内存空间来存储元素,但它的内存空间是固定大小的,申请之后就无法改变。3、vector的底层是array实现的二维数组二维数组在内存的空间地址是连续的704|二分查找思路1、把整个数组一分为二;2、判断目标值在左区间还是右区间,若在左区间,则修改右区间指针的位置;若在右区间,则修改新区间的左区间位置3、重复上述过程,直到lef

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

代码随想录算法Day1|704.二分查找、27.移除元素Lasteditedtime:April5,202311:27AM数据理论基础数组是存放在连续内存空间上的相同类型数据的集合。数组下标都是从0开始的。数组内存空间的地址是连续的数组元素不能删除,只能覆盖C++中二维数组的内存的空间地址是连续的704.二分查找二分法前提:数组为有序数组,且数组中无重复元素循环不变量:对区间的定义应该是一个不变量,在边界处理中应该遵循统一原则左闭右闭:classSolution{public:intsearch(vectorint>&nums,inttarget){intleft=0;intright=num

代码随想录算法训练营第一天|leetcode27、704题

一、leetcode第704题本题要求在升序数组中查找目标元素的下标,采用暴力算法扫描数组的时间复杂度为O(n),而使用二分查找法的时间复杂度为O(log2n)。使用二分查找法需要把握目标元素所在数组的起始下标、中点下标和终止下标的关系,通过二分查找可以将目标数组不断缩小直到找到目标元素。具体代码如下:classSolution{public:  intsearch(vector&nums,inttarget){  intn=nums.size();  intlow=0;  inthigh=n-1;  while(lownums[mid])    {      low=mid+1;    } 

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

704.二分查找给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715想法:第一眼看到这个题目,想法就是用暴力去解答,遍历整个数组,如果有等于target的

LeetCode704. 二分查找(C++)

LeetCode704.二分查找题目链接代码题目链接https://leetcode.cn/problems/binary-search/description/代码classSolution{public:intsearch(vectorint>&nums,inttarget){intleft=0;intright=nums.size()-1;while(leftright){intmiddle=left+(right-left)/2;if(nums[middle]>target){right=middle-1;}elseif(nums[middle]target){left=middle+

LeetCode | 704.二分查找

704.二分查找关于二分查找最重要的就是分类讨论好二分,二分看着好写边界case还是需要测试的哈什么是区间不变量?比如区间取左闭右闭的话那么每次区间二分范围都是新区间的左闭右闭后面做判断时要一直基于这个左闭右闭的区间其实区间定义成开或者闭都没有什么关系只是要明确每次收缩范围后范围内的元素是哪些注意会不会漏掉边界就好大家需要注意二分的几种情况当l=0,r=n的时候因为r这个值我们在数组中无法取到,while(l当l=0,r=n-1的时候因为r这个值我们在数组中可以取到,while(l二分法有多种写法,末尾是开区间闭区间都可以解出寻找单个元素和寻找边界的题目,只需要注意相应的是l其实二分还有很多应

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

因基础不好,得多看多练。一.数组基础数组是存放在连续内存空间上的相同类型数据数组下标都是从0开始的。数组内存空间的地址是连续的二.704.二分法(边界规则)题目链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台文章讲解:代码随想录视频讲解:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibili状态:思路:      重点中心就在于找到使用二分法的前提条件,一是数组有序且无重复元素有重复元素数组下标可能不唯一,二是区间的定义没有想清楚,while循环的每次边界处理要考虑区间的定义。主要是左闭右闭和左闭右开。第一种:左闭右闭t

代码随想录算法训练营第一天 | LeetCode 704. 二分查找、35. 搜索插入位置、 34. 在排序数组中查找元素的第一个和最后一个位置、 27. 移除元素

今日刷题心得体会(未看视频讲解):1、二分搜索:涉及要找target前、后的元素时,注意数组是否溢出。704.二分查找题目链接:704.二分查找-力扣(LeetCode)想法:使用二分查找代码实现:intsearch(int*nums,intnumsSize,inttarget){intleft=0,right=numsSize-1,mid=(left+right)/2,ans=-1;while(lefttarget){right=mid-1;mid=(left+right)/2;}elseif(nums[mid]==target){ans=mid;break;}}returnans;}遇到的

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

Leetcode704.二分查找题目链接关键词:二分查找循环不变量区间问题思路:二分查找的应用,关键在于循环过程中区间的维护,记住循环不变量原则,在这个问题中循环不变量是区间的定义,注意左闭右开和左开右闭的区别classSolution{public:intsearch(vector&nums,inttarget){intleft=0,right=nums.size();while(lefttarget){right=middle;}elseleft=middle+1;}}return-1;}};在初始化left与right变量时就应该想清楚区间的定义是什么,如上采用左闭右开classSolu

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

目录27移除元素思路分析 704二分查找思路分析 27移除元素思路分析 不难想到暴力方法,通过新开辟数组在循环中进行判断,如果不为val值就加入新数组。时间复杂度O(n),空间复杂度O(n)。由于题目规定必须仅使用 O(1) 额外空间并原地输入修改数组,我们可以通过快慢指针法进行优化,快指针对整个nums数组进行遍历,慢指针记录满足条件不等于val的数字,最后当快指针完成遍历后返回慢指针。classSolution{publicintremoveElement(int[]nums,intval){intl=0,r=0;for(;r时间复杂度O(n),空间复杂度O(1)。 704二分查找思路分析