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

每天写两道(数组篇)在排序数组中查找元素的第一个和最后一个位置、x的平方根

34.在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

思路:使用二分法分开寻找左右边界值,同时寻找左右边界容易混淆且不好理解

实现:

1.寻找左边边界:

const findLeftBorder = (nums, target)=>{let left = 0let right = nums.length-1let leftBorder = -1while(left <= right){let mid = left+right>>1if(nums[mid] >= target){right = mid - 1leftBorder = right + 1 // 当nums[mid] >= target时修改边界值}else{left = mid + 1}}return leftBorder
}

2.寻找右边边界(同理

const findRightBorder = (nums, target)=>{let left = 0let right = nums.length-1let rightBorder = -1while(left <= right){let mid = left+right>>1if(nums[mid] <= target){left = mid + 1rightBorder = left - 1 }else{right = mid - 1}}return rightBorder
}

3.如果左右边界都为-1,说明target不在数组区间内;

如果左边界>右边界,说明该数组区间内没有target;

剩下情况直接返回 [leftBorder, rightBorder]

var searchRange = function(nums, target) {const leftBorder = findLeftBorder(nums, target)const rightBorder = findRightBorder(nums, target)if(leftBorder == -1 || rightBorder == -1) return [-1,-1]if(leftBorder > rightBorder) return [-1,-1]return [leftBorder,rightBorder]};

69.x的平方根​​​​​​​

给你一个非负整数 x ,计算并返回 x 的 算术平方根 。

由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。

注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

思路:二分法直接干

实现:

var mySqrt = function(x) {let left = 0let right = xwhile(left <= right){let mid = left + right>>1if(mid*mid == x){return mid}else if(mid*mid < x){left = mid+1}else{right = mid -1}}return right
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Linux系统编程 day09 线程同步
  • 学生公寓电费信息管理小程序的设计
  • 毛戈平,在巴黎点亮东方色彩
  • 【合集】自定义结构体 vector priority_queue set map 的构建一网打尽!(C++干货)
  • 理解栈(Stack)及其在 C++ 中的应用【栈、数据结构】
  • 每日算法2024/08/12
  • windows和office微软官方免费激活教程
  • 选择江苏G口大带宽服务器租用的优势有哪些?
  • 简单了解一下 git cherry-pick
  • 2024专业音乐创作必备Guitar Pro8永久破解版激活码
  • 关于android中的各种尺寸与计算
  • javascript逻辑运算符
  • Ecovadis辅导是什么?哪些企业需要做Ecovadis辅导?
  • IO进程----标准IO
  • Redis-哨兵监控(sentinel)
  • 网络传输文件的问题
  • angular学习第一篇-----环境搭建
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ES6 学习笔记(一)let,const和解构赋值
  • es6--symbol
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • Java新版本的开发已正式进入轨道,版本号18.3
  • JS数组方法汇总
  • SpiderData 2019年2月13日 DApp数据排行榜
  • ViewService——一种保证客户端与服务端同步的方法
  • vue--为什么data属性必须是一个函数
  • 项目管理碎碎念系列之一:干系人管理
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​io --- 处理流的核心工具​
  • #include
  • #include<初见C语言之指针(5)>
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (4)Elastix图像配准:3D图像
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Redis使用系列) Springboot 实现Redis 同数据源动态切换db 八
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (二)linux使用docker容器运行mysql
  • (翻译)terry crowley: 写给程序员
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)winform之ListView
  • (自用)网络编程
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET WPF 抖动动画
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .NET建议使用的大小写命名原则
  • .NET业务框架的构建
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • /bin/bash^M: bad interpreter: No such file ordirectory