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

【LeetCode刷题-Java/Python】二分查找

二分查找

  • 704.二分查找
    • 题目
    • 实现
    • 总结
  • 35.搜索插入位置
    • 题目
    • 实现
  • 34. 在排序数组中查找元素的第一个和最后一个位置
    • 题目
    • 实现
  • 69.x的平方根
    • 题目
    • 实现
  • 367. 有效的完全平方数
    • 题目
    • 实现

704.二分查找

题目

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

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

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

实现

class Solution {public int search(int[] nums,int target) {if(target<nums[0]||target>nums[nums.length-1]) // nums.lengthreturn -1;int left=0;int right=nums.length - 1;while(left<=right){int mid=(left+right)/2; //mid = left + ((right - left) >> 1);if (nums[mid]==target)return mid;else if (nums[mid]<target)left=mid+1;else if (nums[mid]>target)right=mid-1;}return -1;}
}
class Solution(object):def search(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""left = 0;right = len(nums)-1;while left<=right:mid=(right+left)/2if nums[mid]>target:right=mid-1  elif nums[mid]<target:left=mid+1 else:return middle return -1 

总结

  • 有序数组,无重复元素 -> 二分查找
  • [left, right] ,while (left <= right) ,right=middle - 1 # left=right时, [left, right]有意义
  • [left, right),right=nums.length,while (left < right) ,right=middle

35.搜索插入位置

题目

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

请必须使用时间复杂度为 O(log n) 的算法。

输入: nums = [1,3,5,6], target = 5
输出: 2

输入: nums = [1,3,5,6], target = 2
输出: 1

输入: nums = [1,3,5,6], target = 7
输出: 4

实现

  • 不存在,返回right+1
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; //mid = left + ((right - left) >> 1);if (nums[mid]==target)return mid;else if (nums[mid]<target)left=mid+1;else if (nums[mid]>target)right=mid-1;}return right+1;}
}

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

题目

题目链接

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

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

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

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

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

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

实现

class Solution {public int[] searchRange(int[] nums, int target) {int index=binarySearch(nums,target);if(index==-1)return new int[] {-1,-1}; //新建数组int left=index;int right=index;while (left-1>= 0 && nums[left-1]==nums[index]) left--;while (right+1< nums.length && nums[right+1]==nums[index]) right++;return new int[] {left, right};}public int binarySearch(int[] nums, int target){int left=0;int right=nums.length - 1;while(left<=right){int mid=(left+right)/2; //mid = left + ((right - left) >> 1);if (nums[mid]==target)return mid;else if (nums[mid]<target)left=mid+1;else if (nums[mid]>target)right=mid-1;}return -1;}
}

69.x的平方根

题目

题目链接
给你一个非负整数 x ,计算并返回 x 的算术平方根 。
由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去 。
注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5 。

输入:x = 4
输出:2

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

实现

class Solution {public int mySqrt(int x) {int left=0;int right=x;int ans=-1;while (left<=right) {int mid=(left+right) / 2;if ((long)mid*mid<=x) {ans=mid;left=mid+1;} elseright=mid-1;}return ans;}
}

367. 有效的完全平方数

题目

给你一个正整数 num 。如果 num 是一个完全平方数,则返回 true ,否则返回 false 。
完全平方数 是一个可以写成某个整数的平方的整数。换句话说,它可以写成某个整数和自身的乘积。
不能使用任何内置的库函数,如 sqrt 。

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

输入: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)/2;if((long)mid*mid==num)return true;else if((long)mid*mid>num)right=mid-1;elseleft=mid+1;}return false;}
}

相关文章:

【LeetCode刷题-Java/Python】二分查找

二分查找704.二分查找题目实现总结35.搜索插入位置题目实现34. 在排序数组中查找元素的第一个和最后一个位置题目实现69.x的平方根题目实现367. 有效的完全平方数题目实现704.二分查找 题目 题目链接 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一…...

Linux 6.2 已正式发布

Linus Torvalds 发布了稳定的 Linux 6.2 内核&#xff0c;这是 2023 年的第一个主要内核版本。硬件方面&#xff0c;Linux 6.2 提升了 Intel Arc 显卡 (DG2/Alchemist) 的稳定性&#xff0c;真正做到开箱即用。英特尔的 On Demand 驱动程序现在状态良好&#xff0c;适用于第 4 …...

Kubernetes 101,第一部分,基础知识

已经有一段时间了,我想花点时间坐下来写写关于Kubernetes 的文章。时机已到。 简而言之,Kubernetes是一个用于自动化和管理容器化应用程序的开源系统。Kubernetes 就是关于容器的。 ❗如果你对什么...

企业级信息系统开发学习笔记1.7 基于XML配置方式使用Spring MVC

文章目录零、本节学习目标一、Spring MVC概述1、MVC架构2、Spring MVC3、使用Spring MVC的两种方式二、基于XML配置与注解的方式使用Spring MVC&#xff08;一&#xff09;创建Spring项目【SpringMVCDemo01】&#xff08;二&#xff09;在pom文件里添加相关依赖&#xff08;三&…...

java反射,动态代理

1. 反射 1.1 反射的概述&#xff1a; ​ 专业的解释&#xff08;了解一下&#xff09;&#xff1a; ​ 是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b; ​ 对于任意一个对象&#xff0c;都能够调用它的任意属性和方法…...

React(六):Redux的使用、react-redux简化代码、redux模块化、RTK的使用

React&#xff08;六&#xff09;一、Redux测试项目搭建1.创建store仓库2.创建reducer函数&#xff08;纯函数&#xff09;3.constants.js保存action名字4.修改store中的数据5.动态生成action二、React中如何使用redux1.安装redux2.创建store3.组件中订阅store4.派发action修改…...

静态库和动态库的打包与使用

静态库和动态库 静态库和动态库的打包 生成可执行程序时链接使用 运行可执行程序时加载使用 提前声明&#xff0c;笔者示例的文件有mian.c/child.c/child.h。OK&#xff0c;我们先了解一下&#xff0c;库文件是什么&#xff1f;它其实就是打包了一堆实现常用功能的代码文件. ⭐…...

h264编码之SPS解析

一、概念 SPS即Sequence Paramater Set&#xff0c;又称作序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。 二、定义 H.264标准协议中规定的SPS格式位于文档的7.3.2.1.1&#xff0c;如下图所示&#xff1a; 1、profile_idc 根据《T-REC-H.264-2…...

使用R语言包clusterProfiler做KEGG富集分析时出现的错误及解决方法

使用enrichKEGG做通路富集分析时&#xff0c;一直报错&#xff1a;显示No gene can be mapped....k <- enrichKEGG(gene gene, organism "hsa", pvalueCutoff 1, qvalueCutoff 1)但是之前用同样的基因做分析是能够成功地富集到通路&#xff0c;即便是网上的数据…...

框架——MyBatis的入门案例

框架概述1.1什么是框架框架&#xff08;Framework&#xff09;是整个或部分系统的可重用设计&#xff0c;表现为一组抽象构件及构件实例间交与的方法&#xff1b;另一种定义认为&#xff0c;框架是可被应用开发者定制的应用骨架。前者是从应用方面而后者是从目的方面给出的定义…...

hadoop兼容性验证

前言 Hadoop是一个由Apache基金会所开发的分布式系统基础架构&#xff0c;主要解决海量数据的存储和海量数据的分析计算问题&#xff0c;广义上来说&#xff0c;Hadoop通常是指一个更广泛的概念–hadoop生态圈 Hadoop优缺点&#xff1a; 优点&#xff1a; 1、高可靠性&#x…...

运维提质增效,有哪些办法可以做

凡是代码&#xff0c;难免有 bug。 开发者们的日常&#xff0c;除了用一行行代码搭产品外&#xff0c;便是找出代码里的虫&#xff0c;俗称 debug。 随着移动互联网的快速发展&#xff0c;App 已经成为日常生活中不可或缺的一部分。但是在开发者/运维人员的眼里简直就是痛苦的…...

c++基础——结构体

结构体结构体&#xff08;struct&#xff09;&#xff0c;可以看做是一系列称为成员元素的组合体。可以看做是自定义的数据类型。定义结构体struct abc {int x;int y; } e[array_length];const abc a; abc b, B[array_length], tmp; abc *c;上例中定义了一个名为 abc 的结构体&…...

applicationContext相关加载

spring refresh 概述 refresh是一个方法&#xff0c;spring中所有的ApplicationContext容器都需要通过refresh方法初始化&#xff1b; 处理步骤 其中refresh方法包含12个主要的处理步骤&#xff1a; 1、第1个步骤做前置准备 2、第2~6步骤创建BeanFactory&#xff08;Appl…...

数据同步工具Sqoop

大数据Hadoop之——数据同步工具SqoopSqoop基本原理及常用方法 1 概述 Apache Sqoop&#xff08;SQL-to-Hadoop&#xff09;项目旨在协助RDBMS&#xff08;Relational Database Management System&#xff1a;关系型数据库管理系统&#xff09;与Hadoop之间进行高效的大数据交…...

Kafka 版本

kafka-2.11-2.1.1 : Kafka 1.0.0 后&#xff0c;Kafka 版本命名规则从 4 位到 3 位Kafka版本号是 2.1.1前 2 : 大版本号 (MajorVersion)中 1 : 小版本号或次版本号 (Minor Version)后 1 : 修订版本号 (Patch) Kafka 0.7 最早开源版本 &#xff1a; 只提供最基础的消息队列功…...

ElasticSearch 在Java中的各种实现

ES JavaAPI的相关体系&#xff1a; 词条查询 所谓词条查询&#xff0c;也就是ES不会对查询条件进行分词处理&#xff0c;只有当词条和查询字符串完全匹配时&#xff0c;才会被查询到。 等值查询-term 等值查询&#xff0c;即筛选出一个字段等于特定值的所有记录。 【SQL】 s…...

SpringBoot整合Knife4j

文章目录前言一、Knife4j是什么&#xff1f;二、使用步骤1.导入依赖2.编写配置文件3.编写controller和实体类4.测试总结前言 接上篇整合Swagger链接奉上http://t.csdn.cn/9mXSu 一、Knife4j是什么&#xff1f; 官方文档&#xff1a;https://doc.xiaominfo.com/ knife4j可以理解…...

MyISAM和InnoDB存储引擎的区别

目录前言存储引擎区别事务外键表单的存储数据查询效率数据更新效率如何选择前言 MyISAM和InnoDB是使用MySQL最常用的两种存储引擎&#xff0c;在5.5版本之前默认采用MyISAM存储引擎&#xff0c;从5.5开始采用InnoDB存储引擎。 存储引擎 存储引擎是&#xff1a;数据库管理系统…...

SpringMVC自定义处理多种日期格式的格式转换器

package cn.itcast.utils;import org.springframework.core.convert.converter.Converter;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;/*** 把字符串转换日期*/public class StringToDateConverter implements Converter<String…...

保姆级教程:用GATK4从玉米B73参考基因组中提取SNP和Indel(附完整代码)

玉米基因组变异检测实战指南&#xff1a;从测序数据到SNP/Indel分析全流程 在植物遗传学研究领域&#xff0c;玉米作为重要的模式作物和粮食作物&#xff0c;其基因组变异分析对品种改良和功能基因挖掘具有重要意义。本文将带领生物信息学初学者逐步完成从原始测序数据到变异检…...

模拟真人手写软件,支持随机调节

软件介绍 前阵子公司要求我们签一份保密承诺书&#xff0c;还特别强调必须手写。这下可把不少同事难住了&#xff0c;平时都用电脑打字&#xff0c;手写都快生疏了。于是有同事让我帮忙找找能把手写字做出来的软件。我一开始找了几款手写字体&#xff0c;但写出来的效果太规整…...

oh-my-prompt:模块化、高性能的终端提示符配置方案

1. 项目概述&#xff1a;一个为现代开发者量身打造的终端提示符如果你和我一样&#xff0c;每天有超过一半的工作时间是在终端&#xff08;Terminal&#xff09;里度过的&#xff0c;那么终端提示符&#xff08;Prompt&#xff09;就是你最亲密的“工作伙伴”。它不仅仅是那个闪…...

基于STM32的数控恒流源:从硬件闭环到软件PD调节的工程实践

1. 数控恒流源的核心需求与设计思路 第一次接触数控恒流源是在三年前的一个工业检测设备项目中&#xff0c;当时需要为传感器阵列提供精确的电流激励。传统模拟恒流方案遇到温度漂移问题&#xff0c;最终选择了STM32数控方案。这种方案最大的优势在于&#xff1a;硬件闭环保证响…...

EDA验证与调试:从学术理论到工业落地的核心挑战与自动化未来

1. 从互联网先驱到EDA专家&#xff1a;Andreas Veneris的跨界之路在半导体设计这个高度专业化的领域&#xff0c;Andreas Veneris的经历显得格外独特。他既是多伦多大学电气与计算机工程及计算机科学系的教授&#xff0c;又是EDA&#xff08;电子设计自动化&#xff09;公司Ven…...

终极Windows安卓应用安装指南:告别模拟器,拥抱轻量级体验

终极Windows安卓应用安装指南&#xff1a;告别模拟器&#xff0c;拥抱轻量级体验 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否厌倦了笨重的安卓模拟器&#x…...

OpencvSharp 算子学习教案之 - Cv2.Sobel

OpencvSharp 算子学习教案之 - Cv2.Sobel 大家好&#xff0c;Opencv在很多工程项目中都会用到&#xff0c;而OpencvSharp则是以C#开发与实现的Opencv操作库&#xff0c;对.NET开发人员友好&#xff0c;但很多API的中文资料、应用场景及常见坑点等缺乏系统性归纳&#xff0c;因此…...

手把手教你用GD32F303定时器PWM驱动LED,从寄存器配置到CubeMX生成代码

GD32F303定时器PWM开发全攻略&#xff1a;寄存器配置与图形化工具实战对比 在嵌入式开发领域&#xff0c;PWM&#xff08;脉冲宽度调制&#xff09;技术如同一位无声的指挥家&#xff0c;精准控制着LED亮度、电机转速等关键参数。对于GD32F303这款高性能ARM Cortex-M4内核微控制…...

便民服务渠道智慧整合融通方案

便民服务渠道智慧整合融通方案 目录 第1章项目概述 7 1.1项目背景 7 1.2项目建设目标 7 1.2.1总体目标 8 1.2.2具体目标 8 1.3项目建设范围 9 1.3.1渠道整合范围 9 1.3.2业务覆盖范围 10 1.3.3系统建设范围 10 1.4项目建设意义 11 1.4.1对群众的意义 11 1.4.2对政府的意义 11 …...

青少年情绪障碍辅导机构大筛选,教你选流程规范的靠谱机构

一、为什么要看这份榜单当孩子出现情绪障碍&#xff0c;如叛逆、抑郁、焦虑等问题时&#xff0c;家长往往会感到焦虑和无助&#xff0c;不知道该选择哪家辅导机构。一份客观、专业的辅导机构榜单&#xff0c;可以为家长提供有价值的参考&#xff0c;帮助他们快速了解不同机构的…...