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

二分查找题总结

二分查找题总结

  • hot100
    • 搜索插入位置
    • 搜索二维矩阵
    • 在排序数组中查找元素的第一个和最后一个位置
    • 搜索旋转排序数组
    • 寻找旋转排序数组中的最小值
    • 寻找两个正序数组的中位数

hot100

搜索插入位置

题目链接:
35.搜索插入位置
代码:

class Solution {public int searchInsert(int[] nums, int target) {int left = 0, right = nums.length - 1;while (left <= right){int mid = left + (right - left) / 2;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;}
}

搜索二维矩阵

题目链接:
74.搜索二维矩阵
代码:

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

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

题目链接:
34.在排序数组中查找元素的第一个和最后一个位置
代码:

class Solution {int binarySearch(int[] nums, int target){int left = 0, right = nums.length - 1;while (left <= right){int mid = left + (right - left) / 2;if (nums[mid] == target){return mid;}else if (nums[mid] > target){right = mid - 1;}else if (nums[mid] < target){left = mid + 1;}}return -1;}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] == nums[left - 1]){left --;}while(right + 1 < nums.length && nums[right] == nums[right + 1]){right ++;}return new int[]{left,right};}
}

搜索旋转排序数组

题目链接:
33.搜索旋转排序数组
代码:

class Solution {public int search(int[] nums, int target) {int n = nums.length;if (n == 0) return -1;if (n == 1) return nums[0] == target ? 0:-1;int l = 0, r = n - 1;while (l <= r){int mid = l + (r - l) / 2;if (target == nums[mid]) return mid;if (nums[0] <= nums[mid]){if (nums[0] <= target && target < nums[mid]){r = mid - 1;}else{l = mid + 1;}}else{if (nums[mid] < target && target <= nums[n - 1]){l = mid + 1;}else{r = mid - 1;}}}return -1;}
}

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

题目链接:
153.寻找旋转排序数组中的最小值
代码:

class Solution {public int findMin(int[] nums) {int l = 0, r = nums.length - 1;int minn = Integer.MAX_VALUE;while (l <= r) {int mid = l + (r - l) / 2;if (nums[mid] < nums[r]) {minn = Math.min(minn, nums[mid]);r = mid - 1;}else {minn = Math.min(minn, nums[l]);l = mid + 1;}}return minn;}
}

寻找两个正序数组的中位数

题目链接:
4.寻找两个正序数组的中位数
代码:

class Solution {public double findMedianSortedArrays(int[] nums1, int[] nums2) {int m = nums1.length, n = nums2.length;int len = m + n;int left = -1, right = -1;int aStart = 0, bStart = 0;for (int i = 0; i <= len / 2; i ++){left = right;if (aStart < m && (bStart >= n || nums1[aStart] < nums2[bStart])){right = nums1[aStart ++];}else{right = nums2[bStart ++];}}if (len % 2 == 0){return (left + right) / 2.0;}else{return right;}}
}
http://www.lryc.cn/news/433961.html

相关文章:

  • 仕考网:公务员面试流程介绍
  • (十五)SpringCloudAlibaba-Sentinel持久化到Nacos
  • GitHub图床
  • 记一次高版本view-design的组件迁移到自身项目的低版本
  • QT运行ROS工程
  • 电脑技巧:如何在Win11电脑上调整设置,让屏幕更加护眼?
  • 【数据结构】排序算法篇二
  • python进阶篇-day09-数据结构与算法(非线性结构与排序算法)
  • 线性代数基础
  • LCR 021
  • 【阿雄不会写代码】全国职业院校技能大赛GZ036第四套
  • Vue组件:使用$emit()方法监听子组件事件
  • 数据分析-埋点
  • 【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心
  • 服务器监控工具都是监控服务器的哪些性能和指标
  • 不小心删除丢失了所有短信?如何在 iPhone 上查找和恢复误删除的短信
  • 【skyvern 快速上手】一句话让AI帮你实现爬虫+自动化
  • 【C++ Primer Plus习题】14.1
  • 在Ubuntu上运行QtCreator相关程序
  • MybatisPlus 快速入门
  • Java.lang中的String类和StringBuilder类介绍和常用方法
  • notepad++软件介绍(含安装包)
  • chapter13-常用类——(章节小结)——day17
  • RTX AI PC 和工作站上部署多样化 AI 应用支持 Multi-LoRA
  • C++ STL-deque容器入门详解
  • 数据结构之折半查找
  • linux高级学习12
  • leetcode:3174 清除数字 使用栈,时间复杂度O(n)
  • 神经网络卷积操作
  • 专题二_滑动窗口_算法专题详细总结