代码随想录day1 | 704.二分查找、27.移除元素

145 阅读1分钟

学习内容

  • 数组理论知识
  • 二分查找
  • 移除元素

习题:

704 二分查找

  • 35.搜索插入位置 
  • 34. 在排序数组中查找元素的第一个和最后一个位置

27移除元素

知识点总结

数组是存储在连续内存空间上相同数据类型的集合。

习题总结

704 二分查找

image.png 左闭右闭
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 移除元素

image.png

使用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
};