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

LeetCode 热题 100 35.搜索插入位置

目录

题目:

题目描述:

题目链接:

思路:

核心思路:

思路详解:

代码:

Java代码:


题目:

题目描述:

题目链接:

35. 搜索插入位置 - 力扣(LeetCode)

思路:

核心思路:

二分查找

思路详解:

如果暴力的话需要 O(n) 的时间复杂度,如果二分查找的话则可以降低到 O(logn) 的时间复杂度

由题给定一个排序数组,要求必须使用时间复杂度为O(logn)的算法,相当于提示要使用二分查找

初始设置left指向0索引,right指向nums.length-1索引,再计算中间下标mid。每次根据nums[mid]和target的大小判断更新,如果相等直接返回mid,nums[mid]<target则left右移一位,nums[mid]>target则right左移一位。查找结束如果没有相等值则返回 left,该值为插入位置

为什么如果没有相等值则返回left?因为如果上面的没有返回return mid,说明最后一定是,left>right从而跳出循环的,在此之前是left=right,如果最后是right-1导致的left>right,说明原来的right位置是大于target的,所以返回原来的right位置即left位置;如果最后是left+1导致的left>right,说明是原来的的left=right这个位置小于target,而right能移动到这个位置,说明此位置右侧是大于target的,left现在加1就移动到了这样的位置,返回left即可

代码:

Java代码:

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

相关文章:

  • 详解Windows(十三)——Windows防火墙
  • Python常用方法-持续更新
  • IO复用详解——C/C++
  • ubuntu清除缓存
  • svg图片转base64 -- svg转png -- png转base64
  • [数据结构]5. 栈-Stack
  • ​Android学习总结之handler中源码解析和场景回答
  • 计算机操作系统(七)详细讲解进程的组成与特性,状态与转换
  • 可视化数据图表怎么做?如何实现三维数据可视化?
  • 技术中台-核心技术介绍(微服务、云原生、DevOps等)
  • Prometheus+Grafana+AlertManager完整安装过程
  • YOLO v2:目标检测领域的全面性进化
  • 网络防空总结 各种攻击
  • 光流 | Matlab工具中的光流算法
  • acwing 4275. Dijkstra序列
  • JVM学习专题(二)内存模型深度剖析
  • 尚硅谷阳哥JVM
  • upload-labs通关笔记-第5关 文件上传之.ini绕过
  • CSS Grid布局:从入门到实战
  • 【windows server脚本每天从网络盘复制到本地】
  • 齐白石精品在波士顿展出,“白石画屋”呈现水墨挥洒
  • 为什么越来越多景区,把C位留给了书店?
  • 风雨天涯梦——《袁保龄公牍》发微
  • 大外交|巴西总统卢拉第六次访华签署20项协议,“双方都视对方为机遇”
  • 国务院关税税则委:调整对原产于美国的进口商品加征关税措施
  • 佩斯科夫:若普京认为必要,将公布土耳其谈判俄方代表人选