
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。

本题有两种可能:
- 当t(target)在数组中,返回其下标
- t不在数组中,返回它应该插入的位置的下标
可以将数组看成两个区。【数组
=t】 这就变成了找第二个数组【数组>=t】的第一个位置
也就变成了需要左端点的问题了
当循环结束后,left==right了,此时需要考虑边界问题,也就是nums【left】和t的关系,如果小于则返回left的下一个位置
- class Solution {
- public:
- int searchInsert(vector<int>& nums, int target) {
- int left=0,right=nums.size()-1;
- while(left
- {
- int mid=left+(right-left)/2;
- if(nums[mid]==target)return mid;
- if(nums[mid]
1; - if(nums[mid]>target)right=mid;
- }
- //此时left==right,考虑边界问题
- if(nums[left]
return left+1; - return left;
- }
- };
69. x 的平方根
题目描述:
给你一个非负整数 x ,计算并返回 x 的 算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

解题思路:
本题可以变成我们从0到x中找一个数mid,mid的平方最接近x,也可以等于x
将0-x数组分为两部分,一部分【0,mid】【mid+1,x】因此就变成找左区间的右端点了
解题代码:
- class Solution {
- public:
- int mySqrt(int x) {
- long long left=0,right=x;
-
-
相关阅读:
处理器架构和配置
shiro反序列化漏洞复现
重塑 Google 搜索、Android 13 新版发布,这届 I/O 大会为开发者带来了什么?
springboot使用Freemark生成动态页面工具
操作系统:进程与线程大解析
【OpenCV】-霍夫变换
gateway网关
Chart.xkcd图表库
Vue插槽slot详解
智慧公厕设备选型攻略,打造智能化便利生活体验
-
原文地址:https://blog.csdn.net/m0_69061857/article/details/133465824