704. 二分查找
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
第一种情况左闭右闭[ ]
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
let l=0 , r = nums.length-1
while(l<=r){
let mid = (l+r) >> 1;
if(nums[mid]===target) return mid;
let isSmall = nums[mid] < target;
l = isSmall ? mid+1:l;
r = isSmall ?r: mid-1;
}
return -1
};
第二种情况左闭右开[ )
/** * @param {number[]} nums * @param {number} target * @return {number} */ var search = function(nums, target) { let l = 0, r = nums.length; // 区间 [l, r) while(l < r) { let mid = (l + r) >> 1; if(nums[mid] === target) return mid; let isSmall = nums[mid] < target; l = isSmall ? mid + 1 : l; // 所以 mid 不会被取到 r = isSmall ? r : mid; } return -1; };
27. 移除元素
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
第一种方法 双指针
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function (nums, val) {
let left = 0, right = nums.length
while (left < right) {
if (nums[left] === val) {
nums[left] = nums[right - 1]
right--
} else {
left++
}
}
return left
};
第二种for循环遍历
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function (nums, val) {
const n = nums.length;
let left = 0;
for (let right = 0; right < n; right++) {
if (nums[right] !== val) {
nums[left] = nums[right]
left++
}
}
return left;
};