LeetCode 704.二分查找
思路
- 确定区间,区间的定义就是不变量,确定区间为左闭右开还是左闭右闭,若L可能等于R就是[L,R],若L不等于R就是[L,R)。
- 确定边界更新条件
- 考虑边缘情况
难点
- 循环条件到底是 while ( left < right ) 还是 ( left <= right )
- 左右边界更新条件到底是 right = middle 还是 middle - 1
var search (nums,target) {
var numsSize = nums.length;
var l = 0;
var r = numsSize;
var mid = Math.floor(l + (( r - l) >> 1))
while ( l <= r) {
mid = Math.floor(l + (( r - l) >> 1))
if ( nums[mid] < target ) {
l = mid + 1
} else if (nums[mid] > target) {
r = mid - 1
} else {
return mid
}
}
return -1
}
LeetCode 27.移除元素
文档讲解:代码随想录
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
思路:
- 双指针
function remove(nums, target) {
let fastIndex = 0
let slowIndex = 0
for (fastIndex; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] !== target) {
nums[slowIndex++] = nums[fastIndex]
}
}
return slowIndex
}
总结:
- 算法题coding的边界条件一定要细心再细心,小问题引发大bug
- 一定要理清思路,在开始书写代码,切勿盲目coding