算法day08

第一题

1. 两数之和

         由上述题意所知,本题要采用二分法的解题思路,二分法主要是面向有序的数组且也满足二段性的数组,所谓二段性就是在一定的规则下能把该数组分成两个部分;

        本题注意要点:

1、循环结束的条件:

        左指针>右指针时,该循环结束;

2、关于中点的求解公式

        一般采用左指针+整个数组一半的方法,而不是左右指针之差+1的和除以2,主要是防治后者会发生溢出;

        综上所述,代码如下:

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;}
}

故此二分法的朴素解题模版如下所示:

 

第二题

        

         如上题所示,本题需要通过二分查找的方法来找到一个满足题意的连续数组,所以简单来说就需要查找原数组的左右端点;

        上题中的原数组由于是非递减,锁说明满足二段性,即可以使用二分法;

步骤一:就是来分析如何查找左端点:

细节一:

        关于循环条件的分析,两种循环条件如下所示:

        如上图分析,(1,2)左区域里面的数值永远小于t,(3,3,3,4,5)右区域里面的数可能大于等于t;

        所以当mid指针所指的数值x接下来右如下分析:

        x<t时,t值的位置在mid右边,所以更新左指针,left=mid+1,即得到一个新的循环区间;

        x>=t时,t值的位置在mid的左边或者mid的位置,所以right=mid;

        所以当我们的判断条件是left<=right时,做如下分析:

        如果原数组里有我们需要的结果,左后左指针会与右指针重逢,且指向我们所求的端点,但是由于我们的判断条件,所以就会一直更新区间;分析图如下所示:

        综上所述:

1、left=right的时候,就已经出现结果了,不需要在进行判断了;

2、如果在判断就会出现死循环;

细节二:

        关于在循环条件时,我们进行中点计算的公式选择分析:

        有下图所示,重点选择的公式有下面两种方式:

        上面两种方法的区别就是当有长度为2的数组是,找到的中点事不同的;

        第一种方法找到的中点是left,第二种方法找到的中点是right;

        接下来讲第一种中点方法:

        

        如上图所示,第一种中点选择时,

        x<t时,左指针右移和右指针相等,则得到要判断的值;

         x>=t时,左指针右移两位,左指针在右指针的右边,则当前没有找到需要的点,循环结束;

        接下来讲第二种中点方法:

        如上图所示,第二种中点选择时,

        x<t时,左指针右移两位,左指针在右指针的右边,则当前没有找到需要的点,循环结束;

         x>=t时,右指针不变,则进入死循环;

步骤二:就是来分析如何查找右端端点:

细节一:

        关于循环条件的分析,有上述左端点的分析,我们选择left<right;

细节二:

        如上分析,我们选择

        分析如下:

分析如上,代码如下:

        

class Solution {public int[] searchRange(int[] nums, int target) {int[] ret = new int[2];ret[0]= ret[1] = -1;if(nums.length == 0){return ret;}//1二分左端点int left = 0,right = nums.length-1;while(left < right){int mid = left +(right-left)/2;if(nums[mid] < target){left = mid+1;}else{right = mid;}}//此时做左右指针相遇,接下俩判断该相遇点的值是否为目标值if(nums[left] != target){return ret;}else{ret[0] = left;}//2、二分右端点left = 0;right = nums.length-1;while(left < right){int mid = left +(right-left+1)/2;if(nums[mid] <= target){left = mid;}else{right = mid-1;}}//此时做左右指针相遇,接下俩判断该相遇点的值是否为目标值if(nums[left] != target){return ret;}else{ret[1] = right;}return ret;}
}

ps:本次的内容就到这里了,如果大家感兴趣的话就请一键三连哦!!! 

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

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

相关文章

【Leetcode每日一题】 综合练习 - 括号生成(难度⭐⭐)(76)

1. 题目解析 题目链接&#xff1a;22. 括号生成 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题描述 我们需要找出所有可能的、有效的括号序列。一个有效的括号序列指的是一个仅由(和)组成的字符串&#xff0c;…

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱&…

【高阶数据结构(四)】图的最短路径问题

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:高阶数据结构专栏⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多数据结构   &#x1f51d;&#x1f51d; 高阶数据结构 1. 前言2. 单源最短…

第八篇 Asciidoc 输出 All In One HTML 解决图片无法显示问题

问题:我的图片显示不出来了 小明使用 Asciidoc 来记笔记,他将笔记输出为 HTML 文件。小丽向小明借笔记。小明将 Asciidoc 笔记输出为 HTML文件,并拷贝给了小丽。 但是,小丽发现,图片都显示不出来了。 小丽:小明,你给我的笔记,图片都显示不出来啊。 小明:是我给你的…

析构函数详解

目录 析构函数概念特性对象的销毁顺序 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;️ C语言例题 &…

yolov8实战之 .pt 转. tensorRT

1 yolo 训练 1.1修改自己的数据集合 我是有3个类别&#xff0c;差不多这么些数据 1.2 训练 from ultralytics import YOLO # Load a model model YOLO("yolov8m.yaml") # build a new model from scratch #model YOLO(E:/pythonCode/pythonProject1/runs/detec…

风电功率预测 | 基于PSO-BP神经网络实现风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测完整代码风电功率预测 基于粒子群优化算法(Particle Swarm Optimization, PSO)的BP神经网络是一种常见的方法,用于实现风电功率预测。下面是一个基于PSO-BP神经网络实现风电功率预测的一般步骤: 数据准备:收集与风电场发电功率相关的数据,包括…

农林科学SCI期刊,IF=6+,影响力高,对国人非常友好!

一、期刊名称 Crop Journal 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;农林科学 影响因子&#xff1a;6.6 中科院分区&#xff1a;1区 出版方式&#xff1a;开放出版 版面费&#xff1a;$900 三、期刊征稿范围 《作物杂志》是一份双月刊、国际、同…

PHP使用Browsershot进行网页截图

Browsershot是什么 Spatie Browsershot 是一个开源PHP库&#xff0c;它允许开发者在PHP应用程序中生成网页的截图。 这个库特别适用于Laravel框架&#xff0c;但也可以在其他 PHP 应用程序中使用。 主要特点 无头浏览器截图&#xff1a;使用无头版本的 Chrome 或 Chromium 浏…

10W 3KVAC隔离 宽电压输入 AC/DC 电源模块 ——TP10AF系列

TP10AF系列输出功率为10W&#xff0c;具有可靠性高、更小的体积、性价比高等特点&#xff0c;广泛用于工控和电力仪器、仪表、智能家居等相关行业。

SMB攻击利用之-mimikatz上传/下载流量数据包逆向分析

SMB协议作为windows环境下最为常见的一种协议,在历史上出现过无数的通过SMB协议进行网络攻击利用的案例,包括针对SMB协议本身以及通过SMB协议实施网络攻击。 本文将介绍一种通过SMB协议的常见利用方式,即向远程主机传输mimikatz,作为我的专栏《SMB攻击流量数据包分析》中的…

前端学习第一课

AJAX 事先说明&#xff0c;这只是记录&#xff0c;并不是从零到一的教学内容&#xff0c;如果想要学习的话&#xff0c;可以跳过本文章了 ok&#xff0c;转回正题&#xff0c;正如上面所说&#xff0c;这只是记录。其实我是有一定的前端基础的&#xff0c;也做过涉及相关的开发…

【工具】macOS、window11访问limux共享目录\共享磁盘,samba服务安装使用

一、samba服务安装 Samba是一个免费的开源软件实现&#xff0c;使得非Windows操作系统能够与Windows系统进行文件和打印服务共享。它实现了SMB/CIFS协议&#xff0c;并且能够在Linux、Unix、BSD等多种系统上运行。 安装 samba&#xff1a; sudo yum install samba配置 samba…

【介绍下Python多线程,什么是Python多线程】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

【气象常用】时间序列的线性拟合

效果图&#xff1a; 主要步骤&#xff1a; 1. 数据准备&#xff1a;下载Hadley Centre observations datasets的HadSST数据 可参考【气象常用】时间序列图-CSDN博客 2. 数据处理&#xff1a;计算线性拟合 3. 图像绘制&#xff1a;绘制折线及拟合线&#xff0c;并添加文本 …

其他自动化工程师都在偷偷学习AI技术,你再不学就落后了!一篇文章教会你使用AI!

其他自动化工程师都在偷偷学习AI技术&#xff0c;你再不学就落后了&#xff01;一篇文章教会你使用AI&#xff01; 哈喽&#xff0c;大家好&#xff0c;我是小叔。了解小叔的朋友都清楚&#xff0c;我从来都不是标题党&#xff0c;我只会用美女图片来吸引你们&#x1f602;&am…

python 六句话让电脑告诉你,刚才插入的串口编号

六句话让电脑告诉你&#xff0c;我的串口号 第一步&#xff0c;安装python 编译器以及pyserial 模块第二步&#xff0c;写入代码 import serial.tools.list_ports usart_list list(serial.tools.list_ports.comports()) input("Please insert your serial port:")…

midjourney里有哪些常用参数?

一、stylize参数 Midjourney 经过训练&#xff0c;可以生成更加具有艺术色彩、构图和形式的图像。 --stylize或参数--s影响该训练的应用程度。 低风格化值生成的图像与提示词非常匹配&#xff0c;但艺术性较差。数值越高艺术性更好&#xff0c;但是和描述词相关性更差&#…

【python量化交易】—— 双均线择时策略 - Qteasy自定义交易策略【附源码】

使用qteasy自定义并回测双均线交易策略 使用qteasy自定义并回测一个双均线择时策略策略思想导入qteasy模块创建一个新的策略回测交易策略&#xff0c;查看结果 使用qteasy自定义并回测一个双均线择时策略 我们今天使用qteasy来回测一个双均线择时交易策略&#xff0c;qteasy是…