代码随想录算法训练营第一天|704. Binary Search, 27. Remove Element

第一天参加训练营,自身基础比较差也没怎么刷过题。 今天的题目相对来说比较基础的,然后正好可以复习一下数组的一些概念,比如字符数组的排序是从0开始计算的:

并且在数组中的内存空间地址是连续的,增加或删减元素的时候就会移动地址,比如删除下标4的字符H, 那么后面的下标5的J就替代了第五位,变成了下标4的H,相当于后面所有的字符都往前进一位。数组元素不能删,内存空间还是存在的,我们对于删改的操作,只是覆盖了之前的内容。

对于题目来说:

704. Binary Search

是找出一个target值,并且找出他在数组中排在第几位。强调是个有序数组,以ascending order排列,没有重复元素。主要容易出错的地方为:while(left < right)的时候 是right = mid, while(left <= mid)时,right = mid - 1。 借用b站朋友评论给的口诀则为遇等则沾1。因为对于这个区间的定义来说,if (nums[middle] > target) right 要赋值为 middle - 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle - 1。

这是我的代码,相比卡哥附上的代码来说,缺乏了避免当target小于nums[0],nums[nums.length-1]时多次循环运算。所以需要我们做声明来考虑到这种情况:

if (target < nums[0] || target > nums[nums.length - 1]) {
            return -1;
        }

———————————————————————————————————————————27. Remove Element

题目如下: 

这题主要是为了找出不需要的元素,然后删去之后重新输出数组。

所以我们可以用快慢指针的办法,定义一个i来进行遍历,如果和要删去的目标值不相同的话,我们就可在新数组里面记录数组的每个序列,而当遍历到需要删除的数组时,for循环中不需要进行任何操作。

此外本题还可以用相向双指针的办法。

今天的题目比较基础,但对我来说,一些代码编写时考虑到的情况比较少。并且在考虑双指针问题时不能很快的反映出来该怎么正确写,后续仍需巩固之前的题目

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值