使用C++中的二进制提升,在N个数字的前缀和中找到第一个大于或等于X的元素
在这个问题中,我们得到一个由 N 个数字和一个整数值 x 组成的数组 arr[]。我们的任务是创建一个程序,使用二进制提升在 N 个数字的前缀和中查找大于或等于 X 的第一个元素。
前缀和数组元素的强>是一个数组,其每个元素是初始数组中直到该索引为止的所有元素的总和。
示例 - array[] = {5, 2, 9, 4, 1 }
prefixSumArray[] = {5, 7, 16, 20, 21}
让我们举个例子来理解这个问题,
Input: arr[] = {5, 2, 9, 4, 1}, X = 19 Output: 3
解决方案
在这里,我们将使用二元提升的概念来解决问题。二元提升是将给定数字的值增加 2 的幂(通过翻转位完成),范围从 0 到 N。
我们将考虑一个类似于提升二叉树的概念,我们将在其中找到“P”指数的初始值。这是通过翻转位来增加的,确保该值不大于 X。现在,我们将考虑这个位置“P”的升力。
为此,我们将开始翻转数字的位,例如第 i 位翻转不会使总和大于 X。现在,根据 'P' 的值,我们有两种情况 -
目标位置位于 'position + 2 之间^i”和“位置 + 2^(i+1)”,其中第 i 次提升增加了值。或者,目标位置位于“position”和“position + 2^i”之间。
使用此我们将考虑索引位置。
示例
说明我们解决方案工作原理的程序
#include <iostream> #include <math.h> using namespace std; void generatePrefixSum(int arr[], int prefSum[], int n){ prefSum[0] = arr[0]; for (int i = 1; i < n; i++) prefSum[i] = prefSum[i - 1] + arr[i]; } int findPreSumIndexBL(int prefSum[], int n, int x){ int P = 0; int LOGN = log2(n); if (x <= prefSum[0]) return 0; for (int i = LOGN; i >= 0; i--) { if (P + (1 << i) < n && prefSum[P + (1 << i)] < x) { P += (1 << i); } } return P + 1; } int main(){ int arr[] = { 5, 2, 9, 4, 1 }; int X = 19; int n = sizeof(arr) / sizeof(arr[0]); int prefSum[n] = { 0 }; generatePrefixSum(arr, prefSum, n); cout<<"The index of first elements of the array greater than the given number is "; cout<<findPreSumIndexBL(prefSum, n, X); return 0; }
输出
The index of first elements of the array greater than the given number is 3
以上是使用C++中的二进制提升,在N个数字的前缀和中找到第一个大于或等于X的元素的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

关闭iPhone版“查找”后会发生什么?“查找我的iPhone”可帮助您定位丢失或被盗的设备。启用后,“查找我的iPhone”可让您在地图上跟踪设备的位置、播放声音并帮助您找回设备。“查找”还包括一个激活锁,可防止任何人使用您的iPhone。当您关闭“查找我的iPhone”时,您将失去所有这些功能,这可能会使恢复丢失的Apple设备变得困难。虽然“查找我的iPhone”非常有用,但当您想出售、捐赠、以旧换新手机或想要将其送去更换电池或任何其他服务时,您应该禁用它。这样做将确保没有人可以访问有关您

Apple的“查找”应用程序允许您定位您的iPhone或其他设备,以防止丢失或遗忘。虽然“查找”是一个有用的工具来追踪设备,但如果您关注隐私问题、不想耗尽电池或其他原因,您可能希望禁用它。幸运的是,有几种方法可以关闭iPhone上的“查找”,我们将在这篇文章中解释所有这些方法。如何在iPhone上关闭“查找”[4种方法]您可以通过四种方式关闭iPhone的“查找”。如果您使用方法1关闭“查找”,则可以从要禁用它的设备上执行此操作。要继续执行方法2、3和4,要关闭“查找”的iPhone应关闭电源或

使用C#中的Array.IndexOf函数查找数组中某个元素的索引在C#程序中,当我们需要查找数组中某个元素的索引时,可以使用Array.IndexOf函数。Array.IndexOf函数会在指定的数组范围内查找指定的元素,并返回其第一次出现的索引。如果未找到该元素,则返回-1。下面是一段示例代码,演示了如何使用Array.IndexOf函数查找数组中某个元

硬盘序列号和MAC地址是电脑硬件中重要的标识符,它们在管理和维护电脑系统时非常有用。本文将介绍如何查找硬盘序列号和MAC地址。一、查找硬盘序列号硬盘序列号是硬盘制造商为了识别和追踪硬盘的唯一标识符。在不同的操作系统中,查找硬盘序列号的方法略有不同。Windows系统:打开命令提示符(在开始菜单中搜索“cmd”),然后输入以下命令并按回车键:wmicdisk

PHP中的glob()函数用于查找文件或目录,是一种强大的文件操作函数。它可以根据指定的模式匹配,返回文件或目录的路径。glob()函数的语法如下:glob(pattern,flags)其中,pattern表示要匹配的模式字符串,可以是一个通配符表达式,如*.txt(匹配以.txt结尾的文件),或者是具体的文件路径。flags是一个可选参数,用于控制函数

在这个问题中,我们得到一个包含n个未排序整数值的数组aar[]和一个整数val。我们的任务是在未排序的数组中查找元素的开始和结束索引。对于数组中元素的出现,我们将返回,“起始索引和结束索引”(如果在数组中找到两次或多次)。“单个索引”(如果找到)如果数组中不存在,则“元素不存在”。让我们举个例子来理解问题,示例1Input:arr[]={2,1,5,4,6,2,3},val=2Output:startingindex=0,endingindex=5解释元素2出现两次,第一次出现在索引=0处,第二

电脑硬盘序列号怎么查随着计算机技术的发展,电脑硬盘已经成为我们生活中不可或缺的一部分。无论是存储重要的文件,还是安装操作系统和软件,都需要依靠硬盘来完成。而了解电脑硬盘的一些基本信息,比如硬盘的序列号,可以帮助我们更好地管理和维护电脑系统。那么,电脑硬盘序列号怎么查呢?本文将介绍几种常见的方法。方法一:使用Windows系统自带的命令行工具Windows系统

如何用Python编写哈希查找算法?哈希查找算法,又称为散列查找算法,是一种基于哈希表的数据查找方法。相比于线性查找和二分查找等传统查找算法,哈希查找算法具有更高的查找效率。在Python中,我们可以使用字典(dictionary)来实现哈希表,进而实现哈希查找。哈希查找算法的基本思想是将待查找的关键字通过哈希函数转换成一个索引值,然后根据索引值在哈希表中查
