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

[Java恶补day23] 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 <= 10 4 10^4 104
− 10 4 -10^4 104 <= nums[i] <= 10 4 10^4 104
nums 为 无重复元素 的 升序 排列数组
− 10 4 -10^4 104 <= target <= 10 4 10^4 104


知识点:
数组、二分查找


解:
核心思路:二分查找

三个测试用例的分析:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

时间复杂度: O ( l o g n ) O(log n) O(logn)
空间复杂度: O ( 1 ) O(1) O(1)

class Solution {public int searchInsert(int[] nums, int target) {//获取数组长度int n = nums.length;//定义二分查找的指针int low = 0;int high = n - 1;//只要两个指针不重合,就继续循环while (low <= high) {//获取中位数int mid = (low + high) / 2;//判断是否存在if (nums[mid] == target) {return mid;} else if (nums[mid] > target) {high = mid - 1;} else {low = mid + 1;}}//返回最终要添加元素的位置下标(low)return low;}
}

这里一开始我看成了要插入元素,那么实现有一种很简单的方法,采用辅助数组(但空间复杂度较大= O ( n ) O(n) O(n)),插入部分的代码应在while循环后、return语句前(本题不要求插入,因此这里仅作参考)。

		//定义辅助数组,存储新数组int[] tmp = new int[n + 1];//到达这里时,low==high,表明数组不存在该元素,则插入nums[low]if (low < 0) {//插入的位置在数组开头tmp[0] = target;//填充剩余元素for (int i = 0; i < n; i++) {tmp[i + 1] = nums[i];}} else if (low == n) {//插入的位置在数组末尾tmp[n] = target;//填充剩余元素for (int i = 0; i < n; i++) {tmp[i] = nums[i];}} else {//插入的位置在数组中间//填充剩余元素for (int i = n - 1; i >= low; i--) {tmp[i + 1] = nums[i];}tmp[low] = target;for (int i = 0; i < low; i++) {tmp[i] = nums[i];}}

参考:

相关文章:

  • 界面开发框架DevExpress XAF实践:集成.NET Aspire后如何实现服务安排?
  • ICMP协议深度解析
  • 安装 LibreOffice
  • 《一本书看透A股》速读笔记
  • 第三十八课:实战案例-飞鸟和飞机的识别
  • 《性能之巅》第三章 操作系统
  • AI时代,学习力进化指南:如何成为知识的主人?
  • Java(网络编程)
  • unittest 和 pytest 框架
  • 浅谈软件开发工作流
  • Vue3 Router 使用指南:从基础到高级用法
  • openEuler虚拟机中容器化部署
  • springboot+mybatis面试题
  • CQF预备知识:Python相关库 -- 插值过渡指南 scipy.interpolate
  • 接口测试常用工具及测试方法(基础篇)
  • [SKE]CPU 与 GPU 之间数据加密传输的认证与异常处理
  • 触觉智能RK3576核心板工业应用之软硬件全国产化,成功适配开源鸿蒙OpenHarmony5.0
  • aws s3 sdk c++使用指南、适配阿里云oss和aws
  • OCCT 中 BRepBuilderAPI_MakePolygon与BRepBuilderAPI_MakeWire
  • 5种常见的网络保密通信协议
  • 讯响模板网站/外链下载
  • 北京专业网站改版公司/网络广告营销成功案例
  • 电子商务网站建设.pdf/网络推广员的工作内容和步骤
  • 个人网站做废品回收/魔方优化大师官网下载
  • 阎良区网站建设/最近比较火的关键词
  • omv wordpress/seo工具有哪些