• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

胧(LeetCode 2)

开发技术 开发技术 5小时前 1次浏览

LeetCode刷题记录
From[My Site]: https://mirrormoon.top/#/post/17

东风夜放花千树
更吹落
星如雨

1.704. 二分查找

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var search = function(nums, target) {
    let l = 0
    let r = nums.length - 1

    while(l <= r) {
        let mid = (l + r) >> 1
        if(nums[mid] === target) {
            return mid
        }

        if(nums[mid] < target) {
            l = mid + 1
        }

        if(nums[mid] > target) {
            r = mid - 1
        }

    }

    return -1
};

2.35. 搜索插入位置

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    let l = 0
    let r = nums.length - 1

    while(l <= r) {
        let mid = (l+r) >> 1
        if(nums[mid] === target) {
            return mid
        }
        if(nums[mid] > target) {
            r = mid - 1
        }
        if(nums[mid] < target) {
            l = mid + 1
        }
    
    }

    // 不存在的情况
    return l;
};

3.34. 在排序数组中查找元素的第一个和最后一个位置

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var searchRange = function(nums, target) {
    // 没找到
    let result = new Array(2).fill(-1)
    // 数组为空的情况
    if(nums.length === 0) {
        return result
    }

    let l = 0
    let r = nums.length - 1
    while(l <= r) {
        let mid = (l+r) >> 1
        if(nums[mid] === target) {
            // 重复的情况
            result[0] = mid
            result[1] = mid
            // 找右边
            for(let j=mid+1; j<=nums.length-1; j++) {
                if(nums[j] === target) {
                    result[1] = j
                }else{
                    break
                }
            }

            // 找左边
            for(let k=mid-1; k>=0; k--) {
                if(nums[k] === target) {
                    result[0] = k
                }else{
                    break
                }
            }

            break
        }

        if(nums[mid] > target) {
            r = mid - 1
        }

        if(nums[mid] < target) {
            l = mid + 1
        }
    }

    
    return result
};

程序员灯塔
转载请注明原文链接:胧(LeetCode 2)
喜欢 (0)