二分查找总结(十八天)

704. 二分查找

题目

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1

答案

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






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

答案

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






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

题目

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

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

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

示例 1:

输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

答案

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






69. x 的平方根

题目

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

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

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

示例 1:

输入:x = 4
输出:2

示例 2:

输入:x = 8
输出:2
解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

答案

class Solution {public int mySqrt(int x) {int left = 0,right = x;while(left<=right){int mid = left + (right-left)/2;long num = (long)mid * mid;//防止精度损失if(num<x){left = mid + 1;}else if(num>x){right = mid - 1;}else{return mid;}}return left-1;//left为要插入位置,所以left-1}
}






367. 有效的完全平方数

题目

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false

完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。

不能使用任何内置的库函数,如 sqrt

示例 1:

输入:num = 16
输出:true
解释:返回 true ,因为 4 * 4 = 16 且 4 是一个整数。

示例 2:

输入:num = 14
输出:false
解释:返回 false ,因为 3.742 * 3.742 = 14 但 3.742 不是一个整数。

答案

class Solution {public boolean isPerfectSquare(int num) {int left = 0,right = num;while(left<=right){int mid = left + (right-left)/2;long sum = (long) mid * mid;if(sum<num){left = mid + 1;}else if(sum>num){right = mid - 1;}else{return true;}}return false;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

elasticsearch不删除索引只清理数据——筑梦之路

这里主要使用了elasticsearch的接口 _delete_by_query # 清理指定时间之前的数据curl -X POST "http://localhost:9200/[索引名]/_delete_by_query?pretty&wait_for_completionfalse" -H Content-Type: application/json -d {"query": {"range…

WPS 365开启企业一站式AI办公;联发科推出生成式AI服务平台;马斯克:AI 明年或超越人类智力

WPS 365 升级一站式 AI 办公 昨日&#xff0c;金山办公生产力大会举行&#xff0c;现场发布了面向组织和企业的办公新质生产力平台 WPS 365&#xff0c;其包含升级的 WPS Office、最新发布的 WPS AI 企业版和 WPS 协作。 WPS 365 将能覆盖一个组织日常办公基本需求&#xff0c…

我们把 Prompt 函数和类更进一步了

前言 上次我们发了一篇文章&#xff0c;很好的解决了 Prompt 的使用问题&#xff1a; 最好的Prompt管理和使用依然是 Class 和 Function - 继续让LLM和编程语言融合 相比其他方案&#xff0c;具有非常大的优势&#xff0c;完全融入到了现有的编程语言里&#xff0c;而不是大段的…

SpringBoot-如何设计优秀的后端接口?

在实际工作中&#xff0c;我们需要经常跟第三方平台打交道&#xff0c;可能会对接第三方平台API接口&#xff0c;或者提供API接口给第三方平台调用。 那么问题来了&#xff0c;如果设计一个优雅的API接口&#xff0c;能够满足&#xff1a;安全性、可重复调用、稳定性、好定位问…

Java快速入门系列-6(数据库编程与JDBC)

第六章:数据库编程与JDBC 6.1 SQL基础6.1.1 SQL基本结构与命令6.1.2 SQL高级查询6.1.3 SQL子查询与联接6.2 JDBC原理与使用6.2.1 JDBC驱动程序与URL6.2.2 Statement、PreparedStatement与CallableStatement6.2.3 数据库事务处理6.3 数据库连接池6.4 事务管理6.1 SQL基础 SQL(…

2. Spring的创建和Bean的存取

经过前面的学习我们已经大体明白了 IOC 思想以及它的实现方式 DI &#xff0c;本节要讲的是如何Spring框架实现实现DI。 本节目标&#xff1a; Spring(Core) 项目创建将对象存储到 Spring 中将对象(bean)从 Spring 中取出 1. 创建 Spring 项目 与开篇演示的 Spring Boot 项目不…

TiDB MVCC 版本堆积相关原理及排查手段

导读 本文介绍了 TiDB 中 MVCC&#xff08;多版本并发控制&#xff09;机制的原理和相关排查手段。 TiDB 使用 MVCC 机制实现事务&#xff0c;在写入新数据时不会直接替换旧数据&#xff0c;而是保留旧数据的同时以时间戳区分版本。 当历史版本堆积过多时&#xff0c;会导致读…

在Linux终端查找指定类型的文件并统计数量

下面举例说明&#xff1a; find /path/to/directory -type f -exec file {} \; | grep "MIDI"它的作用是在指定的目录&#xff08;/path/to/directory&#xff09;中搜索所有的文件&#xff08;-type f&#xff09;&#xff0c;然后使用file命令检查每个文件的类型&a…

【C++学习】C++11新特性(第二节)—— 右值引用与移动语义超详解

文章目录 文章简介二.右值引用1.什么是左值&#xff0c;什么是右值&#xff1f;什么是左值引用&#xff0c;什么是右值引用&#xff1f;2.左值引用与右值引用比较 三.右值引用使用场景和意义1.左值引用的使用场景&#xff1a;2.左值引用的短板&#xff1a;3.右值引用与移动构造…

Axure RP中的相关概念及高保真原型构建方法

1 Axure RP中概念介绍 对于构建高保真原型来说&#xff0c;需要知道事件&#xff08;Event&#xff09;、Case、Action等概念。Axure RP中给出这些概念&#xff0c;是为了方便原型的构建&#xff0c;尤其是高保真原型的构建。 事件&#xff08;Event&#xff09;是附着于控件…

2024年万字长文-数据仓库面试题及参考答案全解析

数据仓库作为大数据分析的基石,对于大数据架构师而言,掌握其核心概念和技能至关重要。本文将深入探讨数据仓库相关的面试题,并提供详尽的参考答案,旨在帮助读者全面理解数据仓库的构建、管理和优化,以及如何在实际工作中应用相关知识。 目录 1. 数据仓库的定义及其与数据…

独孤思维:副业没做起来,要退钱

01 有些人&#xff0c;纯粹得可爱。 问我&#xff0c;项目没做起来&#xff0c;是不是该退钱&#xff1f; 那我反过来问你&#xff0c;你赚了钱&#xff0c;是不是该分我点&#xff1f; 02 昨天周一&#xff0c;是独孤最忙的时候。 因为各种大会小会&#xff0c;开了4个会…

PHP自助建站系统,小白也能自己搭建网站

无需懂代码&#xff0c;用 自助建站 做企业官网就像做PPT一样简单&#xff0c;您可以亲自操刀做想要的效果&#xff01; 自助建站是一款简单、快捷、高效的工具&#xff0c;可以帮助您制作响应式网站。我们的自助建站系统&#xff0c;将传统的编码工作转化为直观的拖拽操作和文…

buuctf之jarvisoj_level2

一、查看属性 首先还是必要的查看属性环节&#xff1a; 可以知道该文件是一个x86架构下的32位小段ELF程序&#xff0c;开启了栈不可执行&#xff08;NX&#xff09;保护&#xff0c;ret2shellcode是不行的 简单执行可以看到有一个简单的输入后输出hello world 二、静态分析 …

程序员学CFA——数量分析方法(二)

数量分析方法&#xff08;二&#xff09; 数理统计基础统计学的基本概念描述性统计学与推断性统计学总体与样本四种度量尺度名义尺度排序尺度区间尺度比率尺度 数据的展现频率分布直方图与频数多边形 中心趋势均值算术平均几何平均调和平均数加权平均 中位数众数 离散程度绝对离…

Vue2(十五):replace属性、编程式路由导航、缓存路由组件、路由组件独有钩子、路由守卫、history与hash

一、router-link的replace属性 1、作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2、浏览器的历史记录有两种写入方式&#xff1a;分别为push和replace&#xff0c;push是追加历史记录&#xff0c;replace是替换当前记录。路由跳转时候默认为push 3、如何开启repla…

【40分钟速成智能风控8】智能反欺诈模型2

目录 ​编辑 智能反欺诈模型 图计算 智能信用风险模型 专家模型 逻辑回归 决策树 集成树 深度神经网络 循环神经网络 智能反欺诈模型 图计算 图计算&#xff08;Graph Computing&#xff09;是以关联图谱为基础引申出来的一类算法的统称&#xff0c;主要解决了图数…

vue动态绑定style样式之动态添加style样式的多种写法

项目中会需要动态添加 style 行内样式&#xff0c;现指出常用的几种方式。 注意: 1、凡是有 - 的style属性名都要变成驼峰式&#xff0c;比如font-size要变成fontSize。 2、除了绑定值&#xff0c;其他的属性名的值要用引号括起来&#xff0c;比如fontSize:14px而不是 fontSize…

设计模式,模板方法模式、原型模式

模板方法模式 模板方法模式&#xff0c;就是将一些具体层都会有重复的内容&#xff0c;都放在抽象层作为具体层的模板&#xff0c;让具体层的代码能更简洁&#xff0c;也更好地实现代码复用。 代码实现 若有一套试卷&#xff0c;有A和B两个学生来作答&#xff0c;其中的题目…