使用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)來實作雜湊表,進而實作雜湊查找。哈希查找演算法的基本想法是將待查找的關鍵字透過雜湊函數轉換成索引值,然後根據索引值在雜湊表中查
