第一天参加训练营,自身基础比较差也没怎么刷过题。 今天的题目相对来说比较基础的,然后正好可以复习一下数组的一些概念,比如字符数组的排序是从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循环中不需要进行任何操作。
此外本题还可以用相向双指针的办法。
今天的题目比较基础,但对我来说,一些代码编写时考虑到的情况比较少。并且在考虑双指针问题时不能很快的反映出来该怎么正确写,后续仍需巩固之前的题目。