题外话:此系列是代码随想录算法训练营的学习笔记之day1,主要记录刷题的过程思路以及各种解法。希望自己能认认真真刷好算法题,来年春招愿重拳出击!!!
题目一:
解题思路:
1、首先可以直接考虑暴力搜索方法,循环数组,找到对应的target值,便返回其下标,不存在,则返回-1。
2、其次,由于数组已经规定好升序,且没有重复元素,这两个条件的搜索,正好适合于二分查找。
解法一:(暴力解法)
注意点:
1、二分查找需要注意 right 等于 nums.length - 1 还是直接等于nums.length。
2、第一种情况时,属于左闭右闭的二分查找,第二种情况,属于左闭右开的二分查找,while循环条件有变化,mid 也有所变化。
3、JS 中除法是有小数的,比如 3 / 2 是等于 1.5 的,因此需要手动使用 Math.floor 进行向下取整。
4、mid = left + Math.floor((right - left) / 2) 可以使用 mid = left + ((right - left) >> 1)。右移运算符(>>)表示将一个数的二进制值向右移动指定的位数,头部补0,即除 以2的指定次方(最高位即符号位不参与移动)。右移运算可以用来取整。
解法三:(indexOf方法)
解法四:(ES6 findIndex 方法)
注意:ES6 为 Array 增加了find(), findIndex 函数。find()函数用来查找目标元素,找到就返回该元素,找不到返回undefined。findIndex()函数也是查找目标元素,找到就返回元素的位置,找不到就返回-1。
解法五:(递归)