【二分搜索题目】

devtools/2025/2/21 8:12:30/

这里写目录标题

  • 多维坐标之间的映射转换
    • 重塑矩阵
    • 搜索二维矩阵
    • 搜索二维矩阵2
  • 寻找峰值
    • 搜索插入位置
    • 寻找峰值
    • 山脉数组的峰值索引
    • 统计目标成绩的出现次数
  • 特殊数组的二分搜索
    • 搜索旋转排序数组

二分搜索的精髓在于快速收缩搜索区间

多维坐标之间的映射转换

重塑矩阵

题目

在这里插入图片描述
在这里插入图片描述

java">class Solution {public int[][] matrixReshape(int[][] mat, int r, int c) {int m = mat.length, n = mat[0].length;// 如果想成功 reshape,元素个数应该相同if (r * c != m * n) {return mat;}int[][] res = new int[r][c];for (int i = 0; i < m * n; i++) {set(res, i, get(mat, i));}return res;}//再res的第index个(从0开始),值为valuevoid set(int[][]res,int index,int value){int col=res[0].length;int i=index/col;int j=index%col;res[i][j]=value;}int get(int[][]mat,int index){int col=mat[0].length;int i=index/col;int j=index%col;return mat[i][j];}
}

搜索二维矩阵

题目
在这里插入图片描述

java">class Solution {public boolean searchMatrix(int[][] matrix, int target) {int n=matrix.length;int m=matrix[0].length;int left=0,right=n*m-1,mid=0;while(left<=right){mid=(left+right)/2;int value=getMidValue(matrix,mid);if(value<target){left=mid+1;}else if(value>target){right=mid-1;}else{//找到了return true;}}return false;}int getMidValue(int[][]matrix,int index){int col=matrix[0].length;int i=index/col;int j=index%col;return matrix[i][j];}
}

搜索二维矩阵2

题目
在这里插入图片描述

java">class Solution {//从右上角开始,像左移动变小,向下移动变大public boolean searchMatrix(int[][] matrix, int target) {int n=matrix.length;int m=matrix[0].length;int i=0,j=m-1;while(i<n && j>=0){if(matrix[i][j]<target){//往下i++;}else if(matrix[i][j]>target){//往左j--;}else{//找到了return true;}}return false;}
}

寻找峰值

搜索插入位置

题目
在这里插入图片描述

java">class Solution {//找到<targe的最大数的indexpublic int searchInsert(int[] nums, int target) {if(target<=nums[0]){return 0;}int left=0,right=nums.length-1;while(left<right){int mid=(left+right+1)/2;//求最大,取右边if(nums[mid]<target){left=mid;}else{right=mid-1;}}return left+1;}
}

寻找峰值

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

java">class Solution {//注意:寻找一个峰值, nums[-1] = nums[n] = -∞public int findPeakElement(int[] nums) {int left=0,right=nums.length-1;while(left<right){int mid=(left+right)/2;if(nums[mid]<nums[mid+1]){//峰值在mid的右边left=mid+1;}else if(nums[mid]>nums[mid+1]){//峰值在mid左边,包括midright=mid;}}return left;}
}

山脉数组的峰值索引

题目

在这里插入图片描述

跟上面一体类似,考虑mid的周边情况

java">class Solution {//考虑mid的周边情况public int peakIndexInMountainArray(int[] arr) {int left=0,right=arr.length-1;while(left<right){int mid=(left+right)/2;if(arr[mid]<arr[mid+1]){//峰值在mid右边left=mid+1;}else{//峰值在mid的左边,包括midright=mid;}}return left;}
}

统计目标成绩的出现次数

题目
在这里插入图片描述

java">class Solution {//思路:寻找小于target的最大值 的index,然后往后遍历数数public int countTarget(int[] scores, int target) {int left=0,right=scores.length-1;if(left>right){//为空return 0;}while(left<right){int mid=(left+right+1)/2;if(scores[mid]<target){left=mid;}else{right=mid-1;}}int start=left;int count=0;for(int i=start;i<scores.length;i++){if(scores[i]==target){count++;}}return count;}
}

特殊数组的二分搜索

搜索旋转排序数组

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

java">class Solution {public int search(int[] nums, int target) {int left=0,right=nums.length-1;int leftVaule=nums[left],rightValue=nums[right];while(left<=right){int mid=(left+right)/2;if(nums[mid]==target){return mid;}if(nums[mid]>=nums[left]){//mid在左边悬崖or没有悬崖了if(target<nums[mid] && target>=nums[left]){//target在有序区间[0,mid-1]right=mid-1;}else{left=mid+1;}}else{//mid在右边悬崖if(target<nums[mid]){right=mid-1;}else{if(target<nums[left]){left=mid+1;}else{right=mid-1;}}}}return -1;}
}

http://www.ppmy.cn/devtools/160315.html

相关文章

Visonpro 检测是否有缺齿

一、效果展示 二、上面是原展开工具CogPolarUnwrapTool&#xff1b; 第二种方法&#xff1a; 用Blob 和 CogCopyRegionTool 三、 用预处理工具 加减常数&#xff0c;让图片变得更亮点 四、圆展开工具 五、模板匹配 六、代码分解 1.创建集合和文子显示工具 CogGraphicCollec…

网络安全学习架构 网络安全架构内容

网上买的《信息安全原理及应用》的书还没到&#xff0c;就找了一本《密码编码学与网络安全》的电子书&#xff0c;写的也不错&#xff0c;计划今天和明天把第一章绪论和第二章的数论给看完 1. 计算机网络安全概念 计算机安全的三个核心是&#xff1a;完整性&#xff08;只要特…

本地部署Anything LLM+Ollama+DeepSeek R1打造AI智能知识库教程

文章目录 前言1. 本地部署OllamaDeepSeek2. 本地安装Anything LLM3. 配置与使用演示4. 远程调用大模型5. 安装内网穿透6. 配置固定公网地址 前言 本文主要介绍如何在Windows电脑上本地部署Ollama并接入DeepSeek R1大模型&#xff0c;然后使用强大的开源AI工具Anything LLM结合…

MATLAB图像处理:几何变换详解(裁剪、旋转、缩放)

图像几何变换是图像处理的基础操作&#xff0c;适用于图像增强、数据增强&#xff08;深度学习&#xff09;、目标检测等场景。本文将详细讲解 图像裁剪&#xff08;ROI提取&#xff09;、旋转&#xff08;角度调整&#xff09; 和 缩放&#xff08;尺寸调整&#xff09; 的实现…

Open-WebUI官方部署文档

Github地址&#xff1a;GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...) 打开 WebUI &#x1f44b; 如果你是零基础的小白&#xff0c;不知道什么是DeepSeek的话&#xff1f;不知道如何本地化部署&#xff0c;我强烈建议先看…

个人搭建CDN加速服务 特网科技

在互联网快速发展的今天&#xff0c;网站的加载速度对用户体验有着至关重要的影响&#xff0c;传统的网页加载方式依赖于服务器的性能和网络环境&#xff0c;这使得某些网站的页面加载时间过长&#xff0c;用户体验不佳&#xff0c;为了解决这个问题&#xff0c;许多企业开始采…

城市大脑觉醒:AI如何编织未来城市的“神经网络“

城市大脑觉醒:AI如何编织未来城市的"神经网络" (本文共1420字,阅读约需4分钟) 凌晨三点的城市控制中心大屏上,交通、能源、安防等30个系统的数据洪流在此交汇。当AI开始自主调整红绿灯节奏时,值班工程师老张突然意识到:这座城市正在长出"自主神经"…

【Unity动画】导入动画资源到项目中,Animator播放角色动画片段,角色会跟随着动画播放移动。

导入动画资源到项目中&#xff0c;Animator播放角色动画片段,角色会跟随着动画播放移动&#xff0c;但我只想要角色在原地播放动画。比如&#xff1a;播放一个角色Run动画&#xff0c;希望角色在原地奔跑&#xff0c;而不是产生了移动距离。 问题排查&#xff1a; 1.是否勾选…