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

二分查找栈堆

35. 搜索插入位置

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

二分法;

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

74. 搜索二维矩阵

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

排除法;

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int row = matrix.size(), col = matrix[0].size();int r = 0, c = col - 1;while (r < row && c >= 0) {if(matrix[r][c] == target) return true;else if(matrix[r][c] < target){r++;}else c--;} return false;}
};

33. 搜索旋转排序数组

可以在常规二分查找的时候查看当前 mid 为分割位置分割出来的两个部分 [l, mid] 和 [mid + 1, r] 哪个部分是有序的,并根据有序的那个部分确定我们该如何改变二分查找的上下界,因为我们能够根据有序的那部分判断出 target 在不在这个部分:

如果 [l, mid - 1] 是有序数组,且 target 的大小满足 [nums[l],nums[mid]),则我们应该将搜索范围缩小至 [l, mid - 1],否则在 [mid + 1, r] 中寻找。
如果 [mid, r] 是有序数组,且 target 的大小满足 (nums[mid+1],nums[r]],则我们应该将搜索范围缩小至 [mid + 1, r],否则在 [l, mid - 1] 中寻找。

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

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

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。请你找出并返回数组中的 最小元素 。

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;while(left <= right) {int mid = left + (right - left) / 2;if(nums[mid] > nums[right]) {left = mid + 1;}else {right = mid - 1;}}return nums[left];}
int main() {int n;cin >> n;vector<int> nums(n);for(int i = 0; i < n; i++) {cin >> nums[i];}cout << findMin(nums) << endl;return 0;
}
};

文章转载自:
http://ascription.hdqtgc.cn
http://actinospectacin.hdqtgc.cn
http://avaunt.hdqtgc.cn
http://aeronef.hdqtgc.cn
http://automechanism.hdqtgc.cn
http://bicapsular.hdqtgc.cn
http://antilogarithm.hdqtgc.cn
http://acaulescent.hdqtgc.cn
http://assayer.hdqtgc.cn
http://amour.hdqtgc.cn
http://breakwind.hdqtgc.cn
http://antiquarian.hdqtgc.cn
http://bosk.hdqtgc.cn
http://bioactive.hdqtgc.cn
http://ararat.hdqtgc.cn
http://aerosiderolite.hdqtgc.cn
http://cannonry.hdqtgc.cn
http://camelopardalis.hdqtgc.cn
http://alabastrine.hdqtgc.cn
http://able.hdqtgc.cn
http://aluminize.hdqtgc.cn
http://boondoggle.hdqtgc.cn
http://anuclear.hdqtgc.cn
http://casuistical.hdqtgc.cn
http://catmint.hdqtgc.cn
http://butterfly.hdqtgc.cn
http://bruin.hdqtgc.cn
http://chemomorphosis.hdqtgc.cn
http://cerumen.hdqtgc.cn
http://bittern.hdqtgc.cn
http://www.dtcms.com/a/281128.html

相关文章:

  • 【C语言进阶】字符函数和字符串函数的内部原理
  • “ModuleNotFoundError“深度解析:Python模块导入问题的终极指南
  • PHP语言基础知识(超详细)第二节
  • OSPFv3中LSA参数
  • dbever 导出数据库表的建表语句和数据插入语句
  • 嵌入式Linux:进程间通信机制
  • AJAX 开发中的注意点
  • ASRPRO系列语音模块(第十天)
  • AI 增强大前端数据加密与隐私保护:技术实现与合规遵
  • Python 程序设计讲义(2):Python 概述
  • pc浏览器页面语音播报功能
  • 多路文件IO的几个模型
  • K-means 聚类在肺炎患者分型中的应用(简单示例)
  • 轻轻松松带你进行-负载均衡LVS实战
  • 随机奖励能提升Qwen数学表现?本质是数据污染
  • brupsuite使用中遇到的一些问题(bp启动后浏览器无法连接)/如何导入证书
  • YCQ340汽油机气缸体总成设计cad【8张】设计说明书
  • 模拟C++简易配置系统(模板类 + 全局管理)
  • 一区 Top (HPJ) | WGAS+WGCNA分析文章套路
  • 零基础学软件测试:超详细软件测试基础理论知识讲解
  • 【实时Linux实战系列】使用系统调用实现实时同步
  • Java项目:基于SSM框架实现的学生档案管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
  • 智能体技术深度解析:从概念到企业级搭建指南
  • 自学java,什么书比较好?
  • MaxKB使用笔记【持续ing】
  • LeetCode 1888. 使二进制字符串字符交替的最少反转次数
  • 维基框架发布 1.0.11 至中央仓,深化国产化 DevOps 生态整合
  • 3-Nodejs-使用fs文件系统模块
  • kotlin的自学笔记1
  • 文心一言开源版部署及多维度测评实例