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

LeetCode热题100——二分查找

二分查找

  • 1. 搜索插入位置
  • 2. 搜素二维矩阵
  • 3. 在排序数组中查找第一个和最后一个元素位置

1. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

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

2. 搜素二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。
给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。
在这里插入图片描述

// 题解:按照行和最后一列遍历,对row和col加减
bool searchMatrix(vector<vector<int>>& matrix, int target) {if (matrix.empty()) return false;int rows = matrix.size();if (matrix[0].empty()) return false;int cols = matrix[0].size();int row = 0;int col = cols - 1;while (col < cols && col >= 0 && row < rows && row >= 0) {if (matrix[row][col] < target) row++;else if (matrix[row][col] > target) col--;else return true;}return false;
}

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

给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4]

// 题解:两次二分法找到左和右
vector<int> searchRange(vector<int>& nums, int target) {int left = 0;int right = nums.size() - 1;int first_idx = -1;int last_idx = -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 {first_idx = mid;right = mid - 1;}}left = 0;right = nums.size() - 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 {last_idx = mid;left = mid + 1;}}return {first_idx, last_idx};
}
http://www.lryc.cn/news/232209.html

相关文章:

  • 使用VC++实现分段线性变换,直方图均衡化、锐化处理(使用拉普拉斯算子)
  • react class改hooks写法
  • 桂院校园导航 | 云上高校导航 云开发项目 二次开发教程 1.3
  • sscanf提取相应字符到数组
  • 本地开发环境和服务器传输数据的几种方法
  • LeetCode之二叉树
  • 论文学习——THE USTC SYSTEM FOR ADRESS-M CHALLENGE
  • 第一百七十五回 如何创建放射形状渐变背景
  • vue实现调用手机拍照、录像功能
  • WPF播放视频
  • 交换机如何配置BGP协议
  • 精通Nginx(14)-配置HTTPS
  • 封装一个简单的table组件
  • Avalonia UI框架介绍
  • 【入门篇】1.3 redis客户端之 jedis 高级使用示例
  • 使用CXF调用WSDL(二)
  • list.toArray
  • 2013年11月10日 Go生态洞察:Go语言四周年回顾
  • Ubuntu上使用SSH连接到CentOS系统
  • 【知识增强】A Survey of Knowledge-Enhanced Pre-trained LM 论文笔记
  • shell脚本之函数
  • 订水商城实战教程10-宫格导航
  • 【C++11】lambda表达式 | 包装器
  • 网络安全准入技术之MAC VLAN
  • MyBatis 操作数据库
  • 设计模式 -- 建造者模式(Builder Pattern)
  • 如何下载 Apache + PHP + Mysql 集成安装环境并结合内网穿透工具实现公网访问内网服务
  • 一招告别百度广告烦恼,同时效率提高100倍的几个常用搜索技巧!
  • 文件上传 [ACTF2020 新生赛]Upload1
  • 振南技术干货集:比萨斜塔要倒了,倾斜传感器快来!(1)