【数据结构与算法】LeetCode:二分查找

文章目录

  • 二分查找
    • 二分查找
    • 搜索插入位置 (Hot 100)
    • x 的平方根
    • 搜索二维矩阵(Hot 100)
    • 在排序数组中查找元素的第一个和最后一个位置 (Hot 100)
    • 搜索旋转排序数组 (Hot 100)
    • 寻找旋转排序数组中的最小值 (Hot 100)

二分查找

二分查找

二分查找

class Solution{
public:int search(vector<int>& nums, int target){// 设定左闭右闭的区间int left = 0;  int right = nums.size() - 1;while (left <= right){  // 闭区间查找,left == right依然有效,所以用<=int middle = left + (right-left) / 2; // 中值索引if (nums[middle] > target){   right = middle-1;   // target在左边,更新右上限}else if (nums[middle] < target){left = middle + 1;  // target在右边,更新左上限}else{return middle;    // 找到target,返回下标}}return -1;}};

搜索插入位置 (Hot 100)

搜索插入位置

class Solution {
public:int searchInsert(vector<int>& nums, int target) {int n = nums.size();int left = 0, right = n - 1, ans = n;while(left <= right){ int mid = ((right - left) >> 1) + left;if(nums[mid] > target){  right = mid - 1;}else if (nums[mid] < target){left = mid + 1;}else{return mid;}}// left此时 > right// left指向的是第一个大于target的元素的索引return left;}
};

x 的平方根

x 的平方根

class Solution {
public:int mySqrt(int x) {int l = 0, r = x;while (l <= r) {int mid = l + (r - l) / 2;if ((long long) mid * mid < x) { l = mid + 1;} else if ((long long) mid * mid > x) {r = mid - 1;}else{return mid;}}// l此时 > r,向下取整return r;}
};

搜索二维矩阵(Hot 100)

搜索二维矩阵

class Solution {
public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int m = matrix.size(), n = matrix[0].size();int left = 0, right = m * n - 1;while(left <= right){int mid = (right - left >> 2) + left;int x = matrix[mid / n][mid % n];if(x < target){left = mid + 1;}  else if(x > target){right = mid - 1;} else{return true;}}return false;}
};

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

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

#include <vector>
using namespace std;class Solution {
public:int binarySearch(vector<int>& nums, int target) {// 二分查找变形int left = 0, right = nums.size() - 1, ans = -1;while (left <= right) {int mid = left + ((right - left) >> 1);if (nums[mid] == target) {ans = mid;right = mid - 1; // 找到目标值时,继续在左半部分查找} else if (nums[mid] < target) {left = mid + 1;} else {right = mid - 1;}}return ans;}vector<int> searchRange(vector<int>& nums, int target) {// 调用binarySearch函数,查找目标值的第一个位置int first_pos = binarySearch(nums, target);if (first_pos == -1) return vector<int>{-1, -1};// 查找目标值的最后一个位置int last_pos = first_pos;while (last_pos < nums.size() && nums[last_pos] == target) last_pos++;last_pos--;return vector<int>{first_pos, last_pos};}
};

搜索旋转排序数组 (Hot 100)

搜索旋转排序数组

//定理一:只有在顺序区间内才可以通过区间两端的数值判断target是否在其中。
//定理二:判断顺序区间还是乱序区间,只需要对比 left 和 right 是否是顺序对即可,left <= right,顺序区间,否则乱序区间。
//定理三:每次二分都会至少存在一个顺序区间。class Solution {
public:int search(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) return mid;if (nums[left] <= nums[mid]) {  // left 到 mid 是顺序区间(target >= nums[left] && target < nums[mid]) ? right = mid - 1 : left = mid + 1;// 如果target在顺序区间,修改区间右边界; 如果不在,修改搜索左边界}else {  // mid 到 right 是顺序区间(target > nums[mid] && target <= nums[right]) ? left = mid + 1 : right = mid - 1;// 如果target在顺序区间,修改区间左边界; 如果不在,修改搜索右边界}}return -1;}
};

寻找旋转排序数组中的最小值 (Hot 100)

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

class Solution {  
public:  int findMin(vector<int>& nums) {  int low = 0;  int high = nums.size() - 1;  while (low < high) {  int pivot = low + (high - low) / 2;  // 如果pivot位置的值小于high位置的值,说明最小值在pivot和low之间(包括pivot)  if (nums[pivot] <= nums[high])  high = pivot;   // 否则,最小值在pivot和high之间(不包括pivot)  else  low = pivot + 1;  // (nums[pivot] > nums[high])}  // 当low和high相等时,说明已经找到了最小值,返回该值  return nums[high];  }  
};

if (nums[pivot] < nums[high])
在这里插入图片描述

else:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/148330.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

postman工具

postman是什么接口工具。接口是什么api&#xff08;俗称应用编程接口&#xff0c;简称接口&#xff09;&#xff1b;也就是程序&#xff08;服务端程序&#xff09;与程序&#xff08;客户端程序&#xff09;之间的通信方式。例如模仿服务端发送请求到客户端例如模仿客户端发送…

情指行一体化平台建设方案和必要性-———未来之窗行业应用跨平台架构

一、平台建设必要性 以下是情指行一体化平台搭建的一些必要性&#xff1a; 1. 提高响应速度 - 实现情报、指挥和行动的快速协同&#xff0c;大大缩短从信息获取到决策执行的时间&#xff0c;提高对紧急情况和突发事件的响应效率。 2. 优化资源配置 - 整合各类资源信…

没有 Microsoft Wi-Fi Direct Virtual Adapter #2 导致无法打开热点

我的环境 电脑打不开热点 系统 win11 64位 品牌 hp 笔记本电脑 解决方法&#xff1a; https://answers.microsoft.com/zh-hans/windows/forum/all/%E7%A7%BB%E5%8A%A8%E7%83%AD%E7%82%B9%E6%97%A0/9285620a-71d9-4671-b125-4cd607b6371a 解决 &#x1f613; 扫描一下设…

Codeforces Round 969 (Div. 1) C. Eri and Expanded Sets(线段树维护差分数组gcd+双指针+尺取)

题目 转化一下题意就是&#xff0c; 给定一个n(n<4e5)&#xff0c;代表数组a的长度&#xff0c; 求有多少区间&#xff0c;满足区间内两两差分后得到的新数组的gcd∈{0,1} 实际t(t<1e4)组样例&#xff0c;保证sumn不超过4e5 思路来源 乱搞acjiangly代码 题解 一个…

摆脱困境并在 Android 手机上取回删除照片的所有解决方案

没有什么比不小心从 Android 智能手机中删除所有照片更糟糕的了。这样&#xff0c;除非您在重置之前已经备份了数据&#xff0c;否则您的所有照片都会消失。如果您忘记备份照片&#xff0c;您仍然可以按照一些简单的技术在 Android 设备上恢复已删除的照片。 您的 Android 智能…

【漏洞复现】用友 NC-Cloud queryStaffByName Sql注入漏洞

免责声明&#xff1a; 本文内容旨在提供有关特定漏洞或安全漏洞的信息&#xff0c;以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步&#xff0c;并非出于任何恶意目的。阅读者应该明白&#xff0c;在利用本文提到的漏洞信息或进行相关测…

VMware安装ubuntu24.04桌面版

一、安装推荐要求 双核2 GHz处理器或更高 4 GB系统内存 25 GB磁盘存储空间 可访问的互联网 光驱或USB安装介质 二、下载桌面系统 下载地址&#xff08;使用手机转存再下载是对作者的最大支持&#xff09;&#xff1a;夸克网盘分享 (quark.cn) 已安装的纯净版ubuntu虚拟…

招联金融2025秋招--大量招后台、算法

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策划 产品运营…

Day05 日期类OJ题目

计算日期到天数转换_牛客题霸_牛客网根据输入的日期&#xff0c;计算是这一年的第几天。 保证年份为4位数且日期合法。 进阶&#xff1a;时。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/4938575031726974727572 根据输入的日期&#xff0c;计算是这一年的第几…

Golang | Leetcode Golang题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; func levelOrder(root *Node) (ans [][]int) {if root nil {return}q : []*Node{root}for q ! nil {level : []int{}tmp : qq nilfor _, node : range tmp {level append(level, node.Val)q append(q, node.Children...)}ans append(a…

HTML和CSS做一个无脚本的手风琴页面(保姆级)

一、前言 使用HTML和CSS做一个无脚本的手风琴页面。让知识以自己喜欢的方式进入脑子&#xff0c;适用于很多场景&#xff0c;比如以下&#xff1a; 【注&#xff1a;图片源自百度】 二、HTML框架 使用外部样式表&#xff0c;将CSS文件用link标签引入 整体框架如下图&#x…

20240923 每日AI必读资讯

GPT-4o能玩《黑神话》&#xff01;精英怪胜率超人类&#xff0c;无强化学习纯大模型方案 - 阿里巴巴的研究人员们提出了一个新型VARP&#xff08;视觉动作角色扮演&#xff09;智能体框架。 - 能直接将游戏截图作为输入&#xff0c;通过视觉语言模型推理&#xff0c;最终生成…

WebGL颜色与纹理

WEBGL中的着色器变量包括以下种类&#xff1a; 属性变量&#xff08;Attribute Variables&#xff09;&#xff1a;这些变量用于接收从应用程序中传递的顶点数据&#xff0c;比如顶点位置和颜色&#xff0c;是只读的不可修改。统一变量&#xff08;Uniform Variables&#xff…

STM32篇:开发环境安装

编程语言&#xff1a;C语言 需要安装的软件有两个&#xff1a;Keil5 和 STM32CubeMX 一.Keil5 的安装 使用 Keil4 写 STM32 代码其实也是可以&#xff0c;但需要很复杂的配置&#xff0c;不建议新手操作。 比较推荐 Keil5 编写 STM32 &#xff0c;只需要一些简单的设置就可…

定了,东湖高新区下半年中高级职称申报时间

2024年东湖高新区中级职称申报开始了&#xff0c;水测成绩上周已出&#xff0c;本周已经开始申报了&#xff0c;时间确实挺着急的。 报送材料起止时间及地点&#xff1a; &#xff08;一&#xff09;网上报名时间&#xff1a; 2024年9月14日至9月30日24:00 &#xff08;二&…

C++ | Leetcode C++题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrder(Node* root) {if (!root) {return {};}vector<vector<int>> ans;queue<Node*> q;q.push(root);while (!q.empty()) {int cnt q.size();vector<…

C/C++中的内存管理

文章目录 前言一、C/C中的内存分布二、C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 三、C中的内存管理方式四、operator new与operator delete函数五、new和delete的实现原理 六、定位new表达式(placement-new) 七、malloc/free和new/delete的区别 总结 前…

django学习入门系列之第十点《A 案例: 员工管理系统15》

文章目录 15 认识Ajax15.4 ajax请求的返回值实例2&#xff1a;前端输入数据提交到后端实例3&#xff1a;传输多个数据 往期回顾 15 认识Ajax 15.4 ajax请求的返回值 一般数据交互整合的都是json格式 后端一般会返回一个JSON格式 返回json格式一般有以下两种写法 上面注释的…

【全网最全】2024年华为杯研究生数学建模A题成品论文

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片&#xff0c;那是获取资料的入口&#xff01; 点击链接获取群聊【2024华为杯研赛资料汇总】&#xff1a;https://qm.qq.com/q/yB6JDUTaWAhttps://qm.qq.com/q/yB6JDUTaWAA题第一问是关于如何建立一个低复杂度模型&a…

Java--File

FIle 概述 File的构造方法 > 1. 一个File对象代表硬盘中实际存在的一个文件或者目录。 > 2. 无论该路径下是否存在文件或者目录&#xff0c;都不影响File对象的创建。 代码演示&#xff1a; // 文件路径名 String pathname "D:\\aaa.txt"; File file1 new …