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

【优选算法】二分查找

一、二分查找

class Solution {
public:int search(vector<int>& nums, int target) {int n = nums.size();int left = 0, right = n-1;while(left <= right){int mid = (left+right)/2;if(nums[mid] > target) right = mid-1;else if(nums[mid] < target) left = mid+1;else{return mid;}}return -1;}
};

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

class Solution {
public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size() == 0)    return {-1,-1};vector<int> ret;int n = nums.size();// 找左端点int left = 0, right = n - 1;while(left < right){int mid = left + (right - left)/2;if(nums[mid] >= target){right = mid;}else{left = mid+1;}}       if(nums[left] != target) return {-1,-1};else ret.push_back(left);// 找右端点left = 0, right = n-1;while(left < right){int mid = left + (right - left + 1)/2;if(nums[mid] > target){right = mid-1;}else{left = mid;}} if(nums[right] != target) return {-1,-1};else ret.push_back(right);return ret;}
};

三、搜索插入位置

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int n = nums.size();int left = 0, right = n-1;while(left < right){int mid = (left + right)/2;if(nums[mid] < target){left = mid+1;}else{right = mid;}}if(nums[left] < target) return left+1;else return left;}
};

四、x的平方根

class Solution {
public:int mySqrt(int x) {if(x < 1) return 0;int left = 1, right = x;while(left < right){long long mid = left + (right - left + 1) / 2;if(mid * mid > x){right = mid - 1;}else{left = mid;}}return left;}
};

五、山脉数组的峰顶索引

class Solution {
public:int peakIndexInMountainArray(vector<int>& arr) {int n = arr.size();int left = 1, right = n-2;while(left < right){int mid = (left + right + 1)/2;if(arr[mid] > arr[mid-1]){left = mid;}else{right = mid - 1;}}return left;}
};

六、寻找峰值

class Solution {
public:int findPeakElement(vector<int>& nums) {int n = nums.size();int left = 0, right = n-1;while(left < right){int mid = left + (right - left) / 2;if(nums[mid] > nums[mid+1]){right = mid;}   else{left = mid + 1;}   }return left;}
};

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

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

八、点名

class Solution {
public:int takeAttendance(vector<int>& records) {int n = records.size();int left = 0, right = n-1;while(left < right){int mid = left + (right - left)/2;if(records[mid] == mid){left = mid+1;}else{right = mid;}}if(left == records[left])  return left+1;else return left;}
};
http://www.xdnf.cn/news/4990.html

相关文章:

  • Windows 下 dll转换成lib
  • djinn: 3靶场渗透
  • 城市客运安全员备考练习题
  • 4.3java工具类Objects,Arrays
  • PMIC电源管理模块的PCB设计
  • 124549-23-1,PBFI AM,测定细胞内区隔的钾离子水平变化
  • 全球实物文件粉碎服务市场洞察:合规驱动下的安全经济与绿色转型
  • 2022-2025年全国路网数据分享
  • C++AVL树
  • 计算机二级(C语言)已过
  • HarmonyOS开发-组件市场
  • 提升研发运维效能:Pacvue 泊客电商的 GenAI 技术实践
  • 从0开始学linux韦东山教程第一三章问题小结(1)
  • wsl - install RabbiqMQ
  • 2025数维杯数学建模C题完整分析参考论文(共36页)(含模型、可运行代码、数据)
  • 【Python】超全常用 conda 命令整理
  • 【深度学习新浪潮】智能追焦技术全解析:从算法到设备应用
  • MATLAB制作柱状图与条图:数据可视化的基础利器
  • Android 项目中配置了多个 maven 仓库,但依赖还是下载失败,除了使用代理,还有其他方法吗?
  • LLM 推理加速:深度解析 Prefilling 与 Decoding 阶段的优化秘籍
  • YOLOv1模型架构、损失值、NMS极大值抑制
  • 从设计到开发,原型标注图全流程标准化
  • 学习DLT698进阶二,电表的事件
  • 基于 Ubuntu 24.04 部署 WebDAV
  • window 显示驱动开发-配置内存段类型
  • Jenkins linux安装
  • 【一】浏览器的copy as fetch和copy as bash的区别
  • 解决:EnvironmentNameNotFound: Could not find conda environment?
  • 深入解析Docker底层原理:从Namespace到联合文件系统
  • 使用SVM进行图像分类