数据结构——二分算法

二分查找

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


代码实现:

/*** Note: The returned array must be malloced, assume caller calls free().*/int binarySearch(int *nums, int numsSize, int target) {int l = 0, r = numsSize - 1;         while (l <= r) {int mid = (l + r) >> 1;if (nums[mid] == target) {            return mid;} else if (nums[mid] > target) {      r = mid - 1;} else if (nums[mid] < target) {      l = mid + 1;}}return -1;
}int* searchRange(int *nums, int numsSize, int target, int *returnSize) {int *res = malloc(sizeof(int) * 2);memset(res, -1, sizeof(int) * 2);*returnSize = 2;if (nums == NULL || numsSize < 1) {return res;}int ind = binarySearch(nums, numsSize, target);if (ind == -1) {return res;}int i, j;for (i = ind - 1; i >= 0; i--) {if (nums[i] != target) {break;}}res[0] = i + 1;for (j = ind + 1; j < numsSize; j++) {if (nums[j] != target) {break;}}res[1] = j - 1;return res;
}

2. 搜索插入位置

代码实现:

/*函数功能:返回有n个元素的数组arr中,找等于key或者第一个比key大的数的下标
*/
int binary_search_v1(int *arr, int n, int key) {int head = 0, tail = n - 1, mid; // 左闭右闭while (head <= tail) {mid = (head + tail) >> 1;if (key > arr[mid]) {head = mid + 1;} else if (key < arr[mid]) {tail = mid - 1;} else if (key == arr[mid]) {return mid;}}return head;
}int binary_search_v2(int *arr, int n, int key) {int head = 0, tail = n, mid; // 左闭右开while (head < tail) {mid = (head + tail) >> 1;if (key > arr[mid]) {head = mid + 1;} else if (key < arr[mid]) {tail = mid;} else if (key == arr[mid]) {return mid;}}return head;
}
int binary_search_v3(int *arr, int l, int n, int key) {int head = l, tail = n; // 左闭右开int mid = (head + tail) >> 1;if (head >= tail) {return head;}if (key > arr[mid]) {head = mid + 1;} else if (key < arr[mid]) {tail = mid;} else if (key == arr[mid]) {return mid;}return binary_search_v3(arr, head, tail, key); 
}int searchInsert(int *nums, int numsSize, int target) {return binary_search_v1(nums, numsSize, target);// return binary_search_v2(nums, numsSize, target);// return binary_search_v3(nums, 0, numsSize, target);
}

3. 二分查找

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【面试题】前端 移动端自适应?_前端移动端适配面试题

设备像素比 设备像素比 (DevicePixelRatio) 指的是设备物理像素和逻辑像素的比例 。比如 iPhone6 的 DPR 是2。 设备像素比 物理像素 / 逻辑像素。可通过 window.devicePixelRatio 获取&#xff0c;CSS 媒体查询代码如下 media (-webkit-min-device-pixel-ratio: 3), (min-…

6.折半查找

折半查找 基本思路在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;若给定值小于中间元素的要查找的数,则在中间元素的左半区继续查找;若给定值大于中间元素的要查找的数,则在中间元素的右半区继续查找。不断重复上述查找过 程,直到查找成功…

揭秘循环购:消费即收益,如何助力商家月销百万?

大家好&#xff0c;我是吴军&#xff0c;今天要和大家分享一种颠覆性的商业模式——循环购。你是否听说过“消费1000送2000”这样的促销活动&#xff1f;是不是觉得太不可思议&#xff0c;商家岂不是在“送钱”&#xff1f;别急&#xff0c;让我为你揭开这背后的秘密。 循环购&…

C和C++实现stack的对比

本篇文章&#xff0c;我们将对比C语言和C实现栈的不同来体会C的魅力&#xff01; 1.栈的介绍 栈&#xff08;Stack&#xff09;是一种常见的数据结构&#xff0c;它是一种特殊的线性表&#xff0c;只允许在一端进行数据的插入和删除操作。这一端通常被称为栈顶&#xff08;Top…

路由器ARP和ARP-proxy(华为)

#交换设备 路由器ARP和ARP-proxy(华为) 当一个广播域中的主机想要访问另外一个广播域的主机时&#xff0c;会广播ARP报文&#xff0c;询问目标IP地址所对应的MAC地址&#xff0c;默认情况下&#xff0c;arp记录是设备自动生成的&#xff0c;但是这样会容易受到ARP欺骗攻击&am…

python实训day4

1、查看数据库的版本 2、查看当前用户 3、查看当前数据库 4、计算表达式的结果; 任何一个数据库,无论大小,都首先是一个超级计算器 5、查看当前MySQL环境中所有的数据库; 系统数据库(只能看)和自定义数据库(任何操作) 6、先建数据库 gaoming 7、如果表已经存在,则创建不能成功 …

韩国警告不要投资数字货币现货 ETF,强调经济风险

首尔&#xff0c;2024 年 6 月 24 日——韩国金融研究所 (KIF) 发布了一份警告报告&#xff0c;反对推出数字货币现货 ETF&#xff0c;称其存在重大经济风险。根据该报告&#xff0c;推出此类 ETF 可能会导致资源配置效率低下、金融市场波动加剧以及整体金融稳定性减弱。 韩国…

【ai】tx2 nx: jetson Triton Inference Server 运行YOLOv4

【ai】tx2 nx: jetson Triton Inference Server 部署YOLOv4 部署了服务端。需要对其测试【ai】tx2-nx 查看 jetpack 版本信息及对应的tritonserver【ai】tx2-nx:配置tritonserver2.17.0-jetpack4.6 环境并运行例子C++ Triton YoloV4 client 是基于 r21.05的 服务端的tensort 的…

springboot3 连接 oceanbase + logproxy数据同步到redis

我这用的是 社区版的 单机&#xff0c; rocky liunx 安装oceanbase 注意事项&#xff1a; logproxy 是 CDC 模式 &#xff0c; springboot 可以直接订阅 canal 是 binlog模式&#xff0c; canal 订阅 logproxy&#xff0c; springboot 订阅 canal logproxy 也可以转 bi…

嵌入式实验---实验七 SPI通信实验

一、实验目的 1、掌握STM32F103SPI通信程序设计流程&#xff1b; 2、熟悉STM32固件库的基本使用。 二、实验原理 1、使用STM32F103R6通过74HC595控制一位LID数码管&#xff0c;实现以下两个要求&#xff1a; &#xff08;1&#xff09;数码管从0到9循环显示&#xff1b; …

无人机巡检小羊仿真

详细视频地址 仿真效果 可视化三维仿真 gazebo物理仿真 px4 飞控仿真 仿qgc简易地面站 详细视频地址

2024.06.22【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第一部分)【AI测试版】

第一部分:人类遗传疾病的分子基础 章节标题:【读书笔记】丨生物信息学与功能基因组学(第十八章 人类疾病 第一部分) 摘要: 第十八章深入探讨了人类遗传疾病的分子基础,强调了DNA变异在疾病发生中的核心作用。疾病的分子机制不仅与个体的适应性有关,而且与进化过程紧密…

Feign Client超时时间设置不生效问题

在使用Feign Client时&#xff0c;可以通过两种方式来设置超时时间&#xff1a; 针对整个Feign Client设置超时时间 可以在Feign Client的配置类中通过修改Request.Options对象来设置超时时间。Request.Options对象有两个属性&#xff0c;connectTimeoutMillis用于设置连接超…

计算机组成原理 | CPU子系统(1)基本概述

基本结构模型 运算与缓存部件 数据寄存部件 PSW不是很清楚 存储器是什么&#xff1f;属于那个结构里&#xff1f; 时序处理部件 cpu是大脑&#xff0c;控制器是神经元 ①通过硬件产生控制信号 ②通过软件产生控制信号 外频&#xff08;系统时钟信号&#xff09;&#xff0c;…

我是如何在markdown编辑器中完成视频的插入和播放的

如果你有更好用的编辑器组件&#xff0c;请一定推荐给我!!!&#xff08;最好附带使用说明&#x1f913;️&#xff09; 介绍 在开发一个社区页面的时候&#xff0c;需要完成发帖、浏览帖子的能力。这里考虑接入markdown编辑器进行开发&#xff0c;也符合大多数用户的习惯。 …

板凳--------第20章-信号:基本概念1

tlpi_hdr.h头文件使用及设置 liao__ran 于 2020-09-29 15:12:01 发布 阅读量1.6k 收藏 5 点赞数 1 分类专栏&#xff1a; linux系统编程手册 版权 linux系统编程手册 专栏收录该内容 7 篇文章 1 订阅 订阅专栏 使用的头文件&#xff0c;主要如下&#xff1a; ename.c.inc erro…

7.XSS获取键盘记录(存储型xss)

什么是跨域 http:// www . xyz.com : 8080 / script/test.js 协议 子域名 主域名 端口 资源地址 当协议、主机&#xff08;主域名&#xff0c;子域名&#xff09;、端口中的任意一个不相同时&#xff0c;称为不同域 我们把不同的域之间请求数据的操作&#xff0c;成为跨域操作…

MOC和MCS通讯流程分析

半导体行业-SECS/GEM协议 半导体设备通讯SECS协议是由国际半导体设备与材料协会&#xff08;SEMI&#xff09;的会员一起构建的连接性标准。它最初是为了在半导体/电子行业的自动化中实现设备与主机系统之间的通信而制定的。 SECS/GEM不仅允许客户查看设备的功能&#xff0c;…

React 自定义 Hook

假如有两个组件都需要获取网络状态&#xff0c;我们可以取逻辑到自定义 Hook 中&#xff0c;避免代码重复 import { useOnlineStatus } from ./useOnlineStatus.js;function StatusBar() {const isOnline useOnlineStatus();return <h1>{isOnline ? ✅ Online : ❌ Dis…

【栈与队列】前k个高频元素

题目&#xff1a;给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 分析&#xff1a;首先我们需要计算数组中元素出现的频率&#xff0c;前几篇文章讲解了哈希表的应用&#xff0c;所以这里我们很容易想到用…