leetCode力扣hot100

张开发
2026/4/15 20:33:08 15 分钟阅读

分享文章

leetCode力扣hot100
35. 搜索插入位置给定一个排序数组和一个目标值在数组中找到目标值并返回其索引。如果目标值不存在于数组中返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。示例 1:输入:nums [1,3,5,6], target 5输出:2方法一运行内存太大56.17MB建议二分法要求时间复杂度O(log n)function searchInsert(nums: number[], target: number): number { for(var i0;inums.length;i){ if(nums[i]target){ return i } } return nums.length };方法二二分法function searchInsert(nums: number[], target: number): number { //左闭右闭 // 定义左指针初始指向数组第一个元素 let left:number 0 // 定义右指针初始指向数组最后一个元素 let right:number nums.length-1 // 循环条件左指针 右指针范围未查找完 while(leftright){ // 计算中间索引防止大数溢出等价于 Math.floor((left right)/2) let middle:number leftMath.floor((right-left)/2) // 情况1中间值 目标值 → 直接返回中间索引找到目标 if(nums[middle]target){ return middle // 情况2中间值 目标值 → 目标值在右半部分左指针右移 }else if(nums[middle]target){ left middle 1 // 情况3中间值 目标值 → 目标值在左半部分右指针左移 }else{ right middle -1 } } // 循环结束未找到目标left 就是目标值应该插入的位置 return left };34. 在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。function searchRange(nums: number[], target: number): number[] { return [nums.indexOf(target),nums.lastIndexOf(target)] };

更多文章