704 二分查找
题目链接:
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
注意:
1、如果是有序数组,且无重复元素,可以考虑使用二分查找,这是两个必要条件。
2、有两种方法,左闭右闭和左闭右开,区别主要是while的条件是left<right还是left<=right(看left=right时有没有意义)和right=mid还是mid-1(一开始定的区间,在每一次更改左右指针后依然是这个闭合状态,因此如果一开始是右开,则right=mid,因为比较的时候不会与nums[mid]比较,而不是mid-1
方法一:[left,right]
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let left = 0;
let right = nums.length - 1;
while(left <= right){
let mid = left + ((right-left)>>1);
if(nums[mid] < target){
left = mid + 1;
}else if(nums[mid] > target){
right = mid-1;
}else{
return mid;
}
}
return -1;
};
方法二:[left,right)
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
let left = 0;
let right = nums.length;
while(left < right){
let mid = left + ((right-left)>>1);
if(nums[mid] > target){
right = mid;
}else if(nums[mid] < target){
left = mid + 1;
}else{
return mid;
}
}
return -1;
};
27 移除元素
题目链接:
https://leetcode.cn/problems/remove-element/
文章讲解:
https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:
https://www.bilibili.com/video/BV12A4y1Z7LP
注意:
使用快慢指针,注意理解快指针和慢指针的含义,其中快指针指的是应该存放在新数组里的元素,慢指针是指新数组的下标。
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
let slow = 0,fast;
for(fast=0;fast<nums.length;fast++){
if(nums[fast] !== val){
nums[slow] = nums[fast];
slow++;
}
}
return slow;
};