二分查找3

1. 有序数组中的单一元素(540)

题目描述:
在这里插入图片描述
算法原理:
二分查找解题关键就在于去找到数组的二段性,这里数组的二段性是从单个数字a开始出现然后分隔出来的,如果mid落入左半部分那么当mid为偶数时nums[mid+1]等于nums[mid],当mid为奇数时nums[mid]等于nums[mid-1],mid落入右半部分则相反。
细节:
循环内的判断条件首先需要判断mid是偶数还是奇数,接着还要判断相等的关系,是比较麻烦的。我们发现规律当mid为偶数异或1时就会得到mid+1,当mid为奇数异或1时就会得到mid-1,因此我们的判断条件直接简化为nums[mid]是否等于nums[mid^1]。
代码如下:

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

题目链接

2. 寻找旋转排序数组中的最小值 II(154)

题目描述:
在这里插入图片描述

算法原理:
nums数组的二段性体现在nums[right],前半部分旋转过去的值是大于等于nums[right]的,后半部分的值都是小于等于nums[right]。不过这题需要注意的地方就是因为数值是可以重复的,所以当nums[mid]等于nums[right]的时候我们是不知道mid是落在前半部分还是后半部分的,为了解决这种情况我们直接将right向左移动一位即可,移动之后因为我们求的是最小值,所以不会影响结果,并且达到了一种去重的效果。
代码如下:

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

题目链接

3. 搜索二维矩阵(74)

题目描述:
在这里插入图片描述

算法原理:
这一题可以使用朴素二分查找的思想来解决,将多维数组看作一维的数组,此时铺开来left=0、right=m*n-1,得到的mid位置的值在二维数组中可以表示为matrix[mid/n]matrix[mid%n],这里的m就是数组的维度数,n就是每个维度的元素个数。
代码如下:

class Solution {
    public boolean searchMatrix(int[][] matrix, int target) {
        int m = matrix.length;
        int n = matrix[0].length;
        int left = 0, right = m * n - 1;
        while (left <= right) {
            int mid = left + (right - left) / 2;
            if (matrix[mid / n][mid % n] > target) {
                right = mid - 1;
            } else if (matrix[mid / n][mid % n] < target) {
                left = mid + 1;
            } else {
                return true;
            }
        }
        return false;
    }
}

题目链接

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

来聊聊Redis持久化AOF管道通信的设计

写在文章开头 最近遇到很多烦心事&#xff0c;希望通过技术来得以放松&#xff0c;今天这篇文章笔者希望会通过源码的方式分析一下AOF如何通过Linux父子进程管道通信的方式保证进行AOF异步重写时还能实时接收用户处理的指令生成的AOF字符串&#xff0c;从而保证尽可能的可靠性…

window 安装 openssl

文章目录 前言window 安装 openssl1. 下载2. 安装3. 配置环境变量4. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会太差&#xff0c;实在白嫖的话…

LVS集群及其它的NAT模式

1.lvs集群作用&#xff1a;是linux的内核层面实现负载均衡的软件&#xff1b;将多个后端服务器组成一个高可用、高性能的服务器的集群&#xff0c;通过负载均衡的算法将客户端的请求分发到后端的服务器上&#xff0c;通过这种方式实现高可用和负载均衡。 2.集群和分布式&#…

Mattermost:一个强大的开源协作平台

Mattermost是一个强大的开源协作平台&#xff0c;基于云原生架构&#xff0c;为企业级用户提供安全、可扩展且自托管的消息传递解决方案。 一、平台特点 开源与定制性&#xff1a;Mattermost是一个开源项目&#xff0c;用户可以根据自身需求定制界面、添加功能或扩展其功能&am…

百川工作手机实现销售管理微信监控系统

在瞬息万变的商业战场中&#xff0c;每一分效率的提升都是企业制胜的关键。传统销售管理模式已难以满足现代企业对精准、高效、合规的迫切需求。今天&#xff0c;让我们一同探索如何利用工作手机这一创新工具&#xff0c;为您的销售团队装上智能翅膀&#xff0c;开启销售管理的…

计算云服务3

第三章 镜像服务 什么是镜像服务(IMS) 镜像服务(lmage ManagementService&#xff0c;IMS)提供镜像的生命周期管理能力。用户可以灵活地使用公共镜像、私有镜像或共享镜像申请弹性云服务器和裸金属服务器。同时&#xff0c;用户还能通过已有的云服务器或使用外部镜像文件创建…

【C++报错已解决】Invalid Use of ‘void’ Expression

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一&#xff1a;调整函数返回类型方法二…

ArcGIS的智慧与情怀

初识ArcGIS 在这个信息化的时代&#xff0c;ArcGIS如同一位智者&#xff0c;静静地伫立在地理信息系统的巅峰。初识它时&#xff0c;我仿佛走进了一片未知的领域&#xff0c;心中充满了好奇与期待。ArcGIS&#xff0c;这款专业的地理信息系统软件&#xff0c;凭借其强大的功能…

【Mutilism NPN三极管驱动P-MOS】2022-4-2

缘由NPN三极管驱动P-MOS异常导通-硬件开发-CSDN问答 有电感性负载应该接反向吸收泻放二极管才能保证安全&#xff1b; 同时建议修改电路使得工作更安全可靠&#xff0c;取消下拉电阻R2&#xff0c;R3用小于100欧姆左右串联一个发光管&#xff0c;这样既可可靠工作也能观察IO输出…

Labview_Workers5.0 学习笔记

1.Local Request 个人理解该类型的请求针对自身的&#xff0c;由EHL或者MHL到该vi的MHL中。 使用快速放置快捷键"Ctrl9"创建方法如下&#xff1a; 创建后的API接口命名均为rql开头&#xff0c;并且在所选main.vi中的MHL创建对应的条件分支。 此时使用该API函数就…

activemq-CVE-2022-41678

Apache ActiveMQ Jolokia 后台远程代码执行漏洞 Apache ActiveMQ在5.16.5&#xff0c;5.17.3版本及以前&#xff0c;后台Jolokia存在一处任意文件写入导致的远程代码执行漏洞。 启动环境 admin/admin 方法一&#xff1a;利用poc 这个方法受到ActiveMQ版本的限制&#xff0c;因…

XTuner 微调 LLM:1.8B, 部署

扫码立刻参与白嫖A100&#xff0c;书生大模型微调部署学习活动。亲测有效 内容来源&#xff1a;Tutorial/xtuner/personal_assistant_document.md at camp2 InternLM/Tutorial GitHubLLM Tutorial. Contribute to InternLM/Tutorial development by creating an account on G…

【Unity 实用技巧】为游戏截图添加自定义水印LOGO

1. 前言 大家好&#xff0c;我是Mark。在Unity开发中&#xff0c;屏幕截图功能是一项常用的功能&#xff0c;它常用于游戏分享而默认的截图往往缺乏辨识度。本文将介绍如何在Unity中实现带有自定义LOGO的屏幕截图&#xff0c;话不多说开搞~ 2. 最终效果 3. 示例代码 代码比较…

基于vue的可视化大屏2

这个可视化大屏分为四个部分 一个引入代码&#xff0c;引入全局 index.vue. 左边代码centerleft.vue 右边代码centerright.vue 中间代码center.vue 主代码&#xff1a; 这是一段 Vue 框架的代码。 在 <template> 部分&#xff1a; 定义了一个根 div 元素。其中包含一…

一些学习网站分享

一些学习网站分享&#xff1a; ✅力扣(LeetCode) 力扣 (LeetCode) 官网 - 全球极客挚爱的技术成长平台 力扣是一个刷题站&#xff0c;支持C&#xff0c;Java&#xff0c;Python等多种编程语言&#xff0c;并按难度分为简单、中等、困难三个等级。是真的能刷到大厂真题 ✅Gith…

程序员学CFA——经济学(六)

经济学&#xff08;六&#xff09; 国际贸易与资本流动国际贸易相关术语开放/封闭经济自由贸易/贸易保护贸易比价国内生产总值与国民生产总值 国际贸易的利弊分析益处弊端 从贸易中获益&#xff1a;比较优势比较优势和绝对优势比较优势的来源 贸易限制和贸易保护施行贸易保护政…

【Linux】WEB网站网络防火墙(WAF软件)Fail2ban:保护服务器免受恶意攻击的必备工具

随着互联网的迅速发展&#xff0c;服务器的安全性日益成为用户和管理员关注的焦点。恶意攻击者不断寻找机会侵入服务器&#xff0c;窃取敏感信息、破坏数据或者滥用系统资源。为了抵御这些威胁&#xff0c;许多安全工具应运而生&#xff0c;其中一款备受推崇的工具就是 Fail2ba…

基于Python的哔哩哔哩数据分析系统设计实现过程,技术使用flask、MySQL、echarts,前端使用Layui

背景和意义 随着互联网和数字媒体行业的快速发展&#xff0c;视频网站作为重要的内容传播平台之一&#xff0c;用户量和内容丰富度呈现爆发式增长。本研究旨在设计并实现一种基于Python的哔哩哔哩数据分析系统&#xff0c;采用Flask框架、MySQL数据库以及echarts数据可视化技术…

保密U盘仍然存在数据安全危机?该怎么用才能规避?

保密U盘以前主要用于国家涉密单位或部门&#xff0c;但随着人们对于信息安全的重视越来越高&#xff0c;在民用企事业单位以及个人用户方面也应用得日益广泛。 使用保密U盘在安全性上比普通U盘具有优势&#xff0c;但却仍然存在安全危机&#xff0c;具体为&#xff1a; 病毒和…