当前位置: 首页 > news >正文

leetcode刷题记录(八十九)——35. 搜索插入位置

(一)问题描述

35. 搜索插入位置 - 力扣(LeetCode)35. 搜索插入位置 - 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。 示例 1:输入: nums = [1,3,5,6], target = 5输出: 2示例 2:输入: nums = [1,3,5,6], target = 2输出: 1示例 3:输入: nums = [1,3,5,6], target = 7输出: 4 提示: * 1 <= nums.length <= 104 * -104 <= nums[i] <= 104 * nums 为 无重复元素 的 升序 排列数组 * -104 <= target <= 104https://leetcode.cn/problems/search-insert-position/description/?envType=study-plan-v2&envId=top-100-liked

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:

输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:

输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:

输入: nums = [1,3,5,6], target = 7
输出: 4

提示:

  • 1 <= nums.length <= 104
  • -104 <= nums[i] <= 104
  • nums 为 无重复元素 的 升序 排列数组
  • -104 <= target <= 104

(二)解决思路

        这道题和704.二分查找的区别只有target不存在与nums中的情况,当target不在nums中是,这道题就变成了找数组中第一个大于target的元素。

        这里用ans来记录,起始值为nums的长度,便于处理边缘情况。在取左区间时记录ans,而右区间时不记录,这是为了统一当target不在nums中时应该取区间的左侧值还是右侧值。这是因为在取左区间且左区间仅包含两个元素时,target的插入位置应该取右侧值,应该等到left和right相等,即区间只剩下一个元素时再取左侧值(此时左侧值和右侧值相等);在取右区间且右区间仅包含两个元素时,target插入位置应该取左侧值。

class Solution {public int searchInsert(int[] nums, int target) {//每次比较的区间包含左右端点int left = 0, right = nums.length-1,ans=nums.length;while(left<=right){int mid=(left+right)/2;if(target==nums[mid]){return mid;}else if(target<nums[mid]){ans=mid;right=mid-1;}else{left=mid+1;}}return ans;}
}
http://www.lryc.cn/news/526132.html

相关文章:

  • Flutter 与 React 前端框架对比:深入分析与实战示例
  • 基于Docker的Spark分布式集群
  • Web 代理、爬行器和爬虫
  • MySQL 事件调度器
  • 直线拟合例子 ,岭回归拟合直线
  • Flutter android debug 编译报错问题。插件编译报错
  • 关于IPD流程的学习理解和使用
  • C# 类(Class)
  • Jenkins pipline怎么设置定时跑脚本
  • PostgreSQL模糊查询相关学习参考
  • 【电脑无法通过鼠标和键盘唤醒应该怎么办】
  • Java 大视界 -- Java 大数据中的数据脱敏技术与合规实践(60)
  • Vue3.5 企业级管理系统实战(三):页面布局及样式处理 (Scss UnoCSS )
  • 【xcode 16.2】升级xcode后mac端flutter版的sentry报错
  • windows在命令行中切换盘符
  • 亚博microros小车-原生ubuntu支持系列:11手指控制与手势识别
  • JAVA-快速排序
  • 日志收集Day003
  • 基于quartz,刷新定时器的cron表达式
  • 数学大模型MAmmoTH:通过混合说明调整建立数学通才模型
  • Opencv学习
  • python生成图片和pdf,快速
  • 剑指Offer|LCR 044.在每个树行中找最大值
  • PWM信号概述
  • 关于BAR(PCIE BAR或AXI BAR)的解释
  • 计算机的错误计算(二百二十一)
  • 【力扣Hot 100】矩阵1
  • 移动端VR处理器和传统显卡的不同
  • 「 机器人 」利用数据驱动模型替代仿真器:加速策略训练并降低硬件依赖
  • MATLAB 如何避免复杂shp文件对inpolygon的影响