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

【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 <= 104

解题思路:

  1. 看到排序数组基本就可以知道考察二分搜索了。
  2. 如果找到目标值,返回其索引,那么当target == nums[mid],直接return mid;就可以了。
  3. 如果目标值不存在于数组中,返回它将会被按顺序插入的位置。这等价于输出小于target的元素的数目。所以最后return left;return right;都可以。以下例子可以帮助理解:

对于 nums = [1.3.5.6], target = 2,其搜索过程如下:

  1. left = 0, right = 4, mid = 2, nums[mid] = 5, target<nums[mid], right = 2;搜索范围为 [0,4)
  2. left = 0, right = 2, mid = 1, nums[mid] =3, target<nums[mid] , right = 1;搜索范围为[0,2)
  3. left = 0, right = 1, mid = 0, nums[mid] = 1, nums[mid] < target ,left = 1;搜索范围为[0,1)
  4. left = right = 1, 结束循环

代码:

class Solution {public int searchInsert(int[] nums, int target) {return findTarget(nums, target);}int findTarget(int[] nums, int target){int left = 0, right = nums.length;while(left < right){int mid = left + (right - left)/2;if(target == nums[mid])return mid;else if(target < nums[mid])right = mid;else if(target > nums[mid])left = mid + 1;}return left; // return right;}
}

测试结果:
请添加图片描述

http://www.lryc.cn/news/37819.html

相关文章:

  • sql面试题
  • SQL 进阶刷题笔记
  • [网鼎杯 2020 朱雀组]Think Java
  • AIR32F103(十) 在无系统环境和FreeRTOS环境集成LVGL
  • SpringBoot接口 - 如何统一异常处理
  • 如何使用Python进行数据可视化
  • vue -- 自定义指令钩子函数补充 自定义过滤器filter参数
  • Qt不会操作?Qt原理不知道? | Qt详细讲解
  • LeetCode-面试题 17.05. 字母与数字【前缀和,哈希表】
  • 华为OD机试题 - 叠放书籍(JavaScript)| 机考必刷
  • 【数据库概论】第十一章 数据库并发控制
  • Nginx配置实例-反向代理案例二
  • HTML 字符集
  • 【C语言】每日刷题 —— 牛客语法篇(3)
  • 基于Vue3和element-plus实现一个完整的登录功能
  • 【java】Java 中泛型的实现原理
  • 【C++提高编程】C++全栈体系(二十七)
  • 软考高级信息系统项目管理师系列之三十九:项目集管理
  • 44-Golang中的channel
  • 80/20法则
  • 计算机网络高频面试题(四)
  • [计算机组成原理(唐朔飞 第2版)]第三章 系统总线(学习复习笔记)
  • 华为OD机试题 - 计算堆栈中的剩余数字(JavaScript)| 机考必刷
  • VB实现点爆炸效果
  • ICG-alkyne,吲哚菁绿-炔基结构式,实验室科研试剂,CAS号:1622335-41-4
  • 【并发编程】volatile的原理我好像又懂了
  • 【已更新实例】Java网络爬虫-HttpClient工具类
  • 7.2 向量的坐标
  • 公式编写1000问21-22
  • 1041 考试座位号