学习内容
- 数组理论知识
- 二分查找
- 移除元素
习题:
704 二分查找
- 35.搜索插入位置
- 34. 在排序数组中查找元素的第一个和最后一个位置
27移除元素
知识点总结
数组是存储在连续内存空间上相同数据类型的集合。
习题总结
704 二分查找
左闭右闭
left = right有意义
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
if (target < nums[0] || target > nums[nums.length - 1]) {
return -1
}
let mid,left = 0;
let right = nums.length - 1
while (left <= right) {
mid = Math.floor((left + right) / 2)
if (target > nums[mid]) {
left = mid + 1
} else if (target < nums[mid]) {
right = mid - 1
} else {
return mid
}
}
return -1
};
左闭右开
right = nums.length
left < right
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function (nums, target) {
if (target < nums[0] || target > nums[nums.length - 1]) {
return -1
}
let mid,left = 0;
let right = nums.length
while (left < right) {
mid = Math.floor((left + right) / 2)
if (target > nums[mid]) {
left = mid + 1
} else if (target < nums[mid]) {
right = mid
} else {
return mid
}
}
return -1
};
27 移除元素
使用api删除做法
- 删除了元素后index需要-1,否则会跳过元素
- 如果不用删除api,需要嵌套for循环
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
for(let i = 0;i<nums.length;i++){
if(nums[i] === val){
nums.splice(i,1)
i--
}
}
return nums.length
};
双指针解法
一前一后两个指针,前面的指针只在后面指针指向数组元素不等于所给val的时候,才进行数组值替换
当没遇到等于val值时,两个指针处于相同位置
遇到后,前面的指针停住,后面的指针前行,再遇到不相等元素时,替换前面指针位置所在数组元素的值
/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function(nums, val) {
let k = 0
for(let i = 0;i<nums.length;i++){
if(nums[i] !== val){
nums[k++] = nums[i]
}
}
return k
};