【二分】搜索旋转数组

文章目录

  • 不重复数组找最小值,返回下标
  • 重复数组找最小值,返回下标
  • 不重复数组找target,返回下标
  • 重复数组找target,返回bool
  • 重复数组找target,返回下标

不重复数组找最小值,返回下标

在这里插入图片描述

在这里插入图片描述

class Solution {public int findMin(int[] nums) {int n = nums.length;int l = 0;int r = n - 1;while(l <= r){if(l == r || nums[l] < nums[r]){break;}int mid = l + (r - l) / 2;if(nums[mid] >= nums[l]){// [l, mid]有序l = mid + 1;}else{// [mid, r]有序r = mid;}}return nums[l];}
}
class Solution {public int findMin(int[] nums) {int n = nums.length;int l = 0;int r = n - 1;while(l <= r){if(l == r || nums[l] <= nums[r]){// [l,r]已经有序break;}int mid = l + (r - l) / 2;if(nums[mid] > nums[l]){l = mid + 1;}else if(nums[mid] < nums[l]){r = mid;}else{l++;}}return nums[l];}
}

重复数组找最小值,返回下标

在这里插入图片描述

在这里插入图片描述

nums[mid] < nums[l],说明最小值肯定在(low, mid]区间内,则r = mid

在这里插入图片描述
nums[mid] > nums[l],说明最小值肯定在mid右侧,(mid,r]区间内,则l = mid + 1

在这里插入图片描述

nums[mid] == nums[l],无法判断最小值在哪个区间,但一定在(l, r]内部
我们假设nums[l]、nums[mid]就是最小值,那我们可以排除l,即l++,因为nums[mid]可以替代nums[l]
若nums[l]、nums[mid]不是最小值,我们直接l++

寻找旋转排序数组中的最小值 II

class Solution {public int findMin(int[] nums) {int n = nums.length;int l = 0;int r = n - 1;while(l <= r){if(l == r || nums[l] <= nums[r]){// [l,r]已经有序break;}int mid = l + (r - l) / 2;if(nums[mid] > nums[l]){l = mid + 1;}else if(nums[mid] < nums[l]){r = mid;}else{l++;}}return nums[l];}
}

不重复数组找target,返回下标

在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int n = nums.length;int l = 0;int r = n - 1;while(l <= r){int mid = l + (r - l) / 2;if(target == nums[mid]){return mid;}if(nums[mid] > nums[l]){// [l, mid]有序if(target >= nums[l] && target < nums[mid]){// 在有序区间内r = mid - 1;}else{l = mid + 1; }}else if(nums[mid] < nums[l]){// [mid, r]有序if(target > nums[mid] && target <= nums[r]){// 在有序区间内l = mid + 1;}else{r = mid - 1; }}else{l++;}}return -1;}
}

重复数组找target,返回bool

在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int n = nums.length;int l = 0;int r = n - 1;while(l <= r){int mid = l + (r - l) / 2;if(target == nums[mid]){return mid;}if(nums[mid] > nums[l]){// [l, mid]有序if(target >= nums[l] && target < nums[mid]){// 在有序区间内r = mid - 1;}else{l = mid + 1; }}else if(nums[mid] < nums[l]){// [mid, r]有序if(target > nums[mid] && target <= nums[r]){// 在有序区间内l = mid + 1;}else{r = mid - 1; }}else{l++;}}return -1;}
}

重复数组找target,返回下标

在这里插入图片描述

class Solution {public int search(int[] nums, int target) {int l = 0;int r = nums.length - 1;if (r == -1)return -1;while (l < r) {                                         // 循环结束条件l==rint mid = l + (r - l) / 2;if (nums[l] < nums[mid]) {                              // 如果左值小于中值,说明左边区间升序               if (nums[l] <= target && target <= nums[mid]) {     // 如果目标在左边的升序区间中,右边界移动到midr = mid;} else {                                               // 否则目标在右半边,左边界移动到mid+1l = mid + 1;}} else if (nums[l] > nums[mid]) {                       // 如果左值大于中值,说明左边不是升序,右半边升序if (nums[l] <= target || target <= nums[mid]) {     // 如果目标在左边,右边界移动到midr = mid;} else {                                               // 否则目标在右半边,左边界移动到mid+1l = mid + 1;}} else if (nums[l] == nums[mid]) {                      // 如果左值等于中值,可能是已经找到了目标,也可能是遇到了重复值if (nums[l] != target) {                            // 如果左值不等于目标,说明还没找到,需要逐一清理重复值。l++;} else {                                               // 如果左值等于目标,说明已经找到最左边的目标值 r = l;                                      // 将右边界移动到l,循环结束}}}return (nums[l] == target) ? l : -1;                     // 返回l,或者-1}
}

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

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

相关文章

Unity3D Pico VR 手势识别

本文章使用的 Unity3D版本: 2021.3.6 , Pico SDK 230 ,Pico OS v.5.7.1 硬件Pico 4 Pico SDK可以去Pico官网下载SDK 导入SDK 第一步&#xff1a;创建Unity3D项目 第二步&#xff1a;导入 PICO Unity Integration SDK 选择 Windows > Package Manager。 在 Packag…

深入浅出AXI协议(2)——通道及信号

一、前言 在之前的文章中&#xff0c;我们主要介绍了什么是AXI协议&#xff0c;AXI协议的特点与优点&#xff0c;然后对于AXI协议非常重要的五通道结构进行了介绍&#xff0c;了解了5个通道各自的作用。本文我们继续AXI协议的学习&#xff0c;我们将讨论5个通道的具体内容和相对…

Linux_4_文本处理工具和正则表达式

目录 1文本编辑工具之神VIM1.1 vi和vim简介1.2使用vim1.2.1 vim 命令格式1.2.2三种主要模式和转换 1.3扩展命令模式1.3.1扩展命令模式基本命令1.3.2 地址定界1.3.3查找并替换1.3.4定制vim的工作特性1.3.4.1行号1.3.4.2忽略字符的大小写1.3.4.3白动缩进1.3.4.4复制粘贴保留格式1…

Django(2)-编写你的第一个 Django 应用

本教程的目的是创建一个网络投票应用程序。 它将由两部分组成&#xff1a; 一个让人们查看和投票的公共站点。 一个让你能添加、修改和删除投票的管理站点。 创建应用 $ python manage.py startapp polls每一个应用是一个python包&#xff0c;一个项目可以包含多个应用。 …

虚虚实实,让敌人难以琢磨

与敌作战&#xff0c;虚虚实实&#xff0c;难以琢磨 【安志强趣讲《孙子兵法》第20讲】 第六篇&#xff1a;虚实篇 【全篇趣讲白话】 打仗就是要虚虚实实&#xff0c;让敌人难以琢磨。 【原文】 孙子曰&#xff1a;凡先处战地而待敌者佚&#xff0c;后处战地而趋战者劳。故善…

二分查找逻辑

目录 二分查找 查找逻辑 题目练习 题目描述 代码示例 总结 二分查找 二分查找是我们经常使用的一种算法&#xff0c;他的逻辑是 在升序或者降序且无重复元素的数组中&#xff0c;比较目标值和数组中间值的方法&#xff0c;每次缩小一半的搜索范围&#xff0c;相比遍历可…

iOS脱壳技术(二):深入探讨dumpdecrypted工具的高级使用方法

前言 应用程序脱壳是指从iOS应用程序中提取其未加密的二进制可执行文件&#xff0c;通常是Mach-O格式。这可以帮助我们深入研究应用程序的底层代码、算法、逻辑以及数据结构。这在逆向工程、性能优化、安全性分析等方面都有着重要的应用。 在上一篇内容中我们已经介绍了Clutc…

使用VSCode SSH实现公网远程连接本地服务器开发的详细教程

文章目录 前言1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 前言 远程…

苍穹外卖 day2 反向代理和负载均衡

一 前端发送的请求&#xff0c;是如何请求到后端服务 前端请求地址&#xff1a;http://localhost/api/employee/login 路径并不匹配 后端接口地址&#xff1a;http://localhost:8080/admin/employee/login 二 查找前端接口 在这个页面上点击f12 后转到networ验证&#xff0…

目标检测(Object Detection):Fast R-CNN,YOLO v3

目录 目标检测(Object Detection) R-CNN SPPNet Fast R-CNN YOLO v1 YOLO v2 YOLO v3 目标检测(Object Detection) 任务是计算机视觉中非常重要的基础问题&#xff0c;也是解决图像分割、目标跟踪、图像描述等问题的基础。目标检测是检测输入图像是否存在给定类别的物体…

python进行数据分析:数据预处理

六大数据类型 见python基本功 import numpy as np import pandas as pd数据预处理 缺失值处理 float_data pd.Series([1.2, -3.5, np.nan, 0]) float_data0 1.2 1 -3.5 2 NaN 3 0.0 dtype: float64查看缺失值 float_data.isna()0 False 1 …

leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和 1、字符串相加 class Solution:def addStrings(self, num1: str, num2: str) -> str:i len(num1) - 1 # num1的末…

Vue2向Vue3过度核心技术路由

目录 1 路由介绍1.思考2.路由的介绍3.总结 2 路由的基本使用1.目标2.作用3.说明4.官网5.VueRouter的使用&#xff08;52&#xff09;6.代码示例7.两个核心步骤8.总结 3 组件的存放目录问题1.组件分类2.存放目录3.总结 4 路由的封装抽离5 Vue路由-重定向1.问题2.解决方案3.语法4…

初阶c语言:趣味扫雷游戏

目录 前言 制作菜单 构建游戏选择框架 实现游戏功能 模块化编程&#xff1a;查看前节三子棋的内容 初始化雷区 ​编辑 优化棋盘 随机埋入地雷 点击后的决策 实现此功能代码 game&#xff08;&#xff09;&#xff1b;的安排 前言 《扫雷》是一款大众类的益智小游戏&…

【校招VIP】java语言考点之双亲委派模型

考点介绍&#xff1a; 双亲委派是校招面试中的高频考点之一。 双亲委派机制定义:当一个类加载器收到了类加载的请求的时候&#xff0c;他不会直接去加载指定的类&#xff0c;而是把这个请求委托给自己的父加载器去加载。只有父加载器无法加载这个类的时候&#xff0c;才会由当前…

MyBatis的核心技术掌握,简单易懂(上)

目录 一.MyBatis中的动态SQL 二.MyBatis中的模糊查询 1. # 符号 2. $ 符号 ---问题 ---所以大家知道 # 和 $ 在MyBatis中的模糊查询中的区别了嘛&#xff1f;&#xff1f; 三.MyBatis 中的结果映射 1. resultType&#xff1a; 2. resultMap&#xff1a; ---问题 ---…

网络:RIP协议

1. RIP协议原理介绍 RIP是一种比较简单的内部网关协议&#xff08;IGP协议&#xff09;&#xff0c;RIP基于距离矢量的贝尔曼-福特算法(Bellman - Ford)来计算到达目的网络的最佳路径。最初的RIP协议开发时间较早&#xff0c;所以在带宽、配置和管理方面的要求也较低。 路由器运…

【附安装包】Fireworks 8安装教程

软件下载 软件&#xff1a;Fireworks版本&#xff1a;8语言&#xff1a;简体中文大小&#xff1a;88.3M安装环境&#xff1a;Win11/Win10/Win8/Win7硬件要求&#xff1a;CPU2.0GHz 内存4G(或更高&#xff09;下载通道①百度网盘丨下载链接&#xff1a;https://pan.baidu.com/s…

wps 画项目进度甘特图

效果如上 步骤一&#xff1a; 创建excel 表格 步骤二&#xff1a; 选中开始时间和结束时间两列数据&#xff0c;右键设置单元格格式 步骤三&#xff1a; 选择数值&#xff0c;点击确定&#xff0c;将日期转成数值。 步骤四&#xff1a;插入图表 选中任务&#xff0c;开始时间…

科研 | Zotero导入无PDF的参考文献、书籍

最近在用Zotero在Word中插入参考文献的时候发现&#xff0c;有些没在网上找到对应的PDF版本&#xff0c;但也不是必须要PDF版本的参考文献或者参考书籍&#xff0c;如何才能不影响正常的文献排版 主要是先在网上找到对应文献&#xff0c;书籍&#xff0c;网页等的ISBN&#xf…