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

LCR 068. 搜索插入位置


文章目录

  • 1.题目
  • 2.思路
  • 3.代码


1.题目

LCR 068. 搜索插入位置

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

请必须使用时间复杂度为 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

示例 4:

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

示例 5:

输入: nums = [1], target = 0
输出: 0

2.思路

  • 如果 nums[mid] 等于目标值,则直接返回 mid,表示找到了目标值的位置。
  • 如果 nums[mid] 大于目标值,说明目标值位于左半部分,此时将右边界 right 移动到 mid - 1
  • 如果 nums[mid] 小于目标值,说明目标值位于右半部分,此时将左边界 left 移动到 mid + 1

3.代码

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int left = 0, right = nums.size() - 1;  // 初始化左右边界// 使用二分查找while (left <= right) {// 计算中间位置,避免直接相加可能导致的溢出int mid = left + (right - left) / 2;// 如果中间元素等于目标值,返回该元素的下标if (nums[mid] == target) {return mid;} // 如果中间元素大于目标值,说明目标值在左半部分else if (nums[mid] > target) {right = mid - 1;  // 缩小右边界到 mid 左边} // 如果中间元素小于目标值,说明目标值在右半部分else {left = mid + 1;  // 缩小左边界到 mid 右边}}// 如果未找到目标值,返回 left 作为插入位置// left 指向第一个大于目标值的位置return left;}
};


http://www.mrgr.cn/news/43782.html

相关文章:

  • 爆赞!豆瓣9.6,多语言版本全球发行,程序员入门大模型必读之作!
  • 数学与生活
  • 微信消息转发(微信消息转发方案的取舍)
  • Linux 操作系统中的 main 函数参数和环境变量
  • 【AI副业项目】揭密AI技术对于儿童古诗文项目的应用
  • ES6总结
  • 15分钟学 Python 第41天:Python 爬虫入门(六)第二篇
  • 【AI副业项目】AI创作英语儿童故事绘本:从零到自媒体达人的实战指南
  • 在线Xpath匹配定位测试工具
  • 虚拟电厂可视化:智能能源管理新时代
  • Arduino Uno开发板控制有源蜂鸣器模块的设计方案
  • 情系英烈献爱心 锦旗感恩致敬意
  • ElasticSearch备考 -- Multi match
  • 红帽操作系统Linux基本命令2( Linux 网络操作系统 06)
  • 【JAVA开源】基于Vue和SpringBoot的洗衣店订单管理系统
  • u盘拷贝文件管控如何实现?4个方法一举搞定,一文详解!100%纯干货,赶快码住!
  • 红米Turbo 3工程固件预览 修复底层 体验原生态系统 默认开启diag端口
  • git使用指南
  • 关于Zipf定律与TF—IDF的一个实践
  • 初识微服务