使用 C++ 將陣列透過給定操作減少到單個整數
給定一個整數變數 Number 作為輸入。讓我們考慮一個數組,其中包含範圍從 1 到 Number 的元素(以任何順序)。如果我們對陣列執行 Number-1 次操作,使得
我們從陣列中選擇兩個元素 A 和 B
從陣列中移除 A 和 B
將 A 和 B 的平方和新增到陣列中
最終我們將得到一個單個整數;目標是找到該元素的最大可能值。
使用優先佇列
為了最大化最終結果,我們將不得不選擇 A 和 B,使得它們最大。
為了找到最大 A 和 B,我們將使用優先佇列來儲存元素的值。
優先佇列按降序儲存元素。
最頂部的元素值最大,依此類推。因此,在彈出兩個元素後,我們將再次將其平方推入佇列。
我們將彈出和推入 Number - 1 次以獲得期望的結果。
示例
輸入 - Number=2
輸出 - 陣列縮減後的單個元素:5
解釋 - 假設陣列中的元素為 [ 1 2]
插入優先佇列後:2 1
A=5, B=4 : A2+B2=1+4=5
最後一個元素:5
輸入 - Number=5
輸出 - 陣列縮減後的單個元素:5
解釋 - 假設陣列中的元素為 [ 5 1 2 4 3]
插入優先佇列後:5 4 3 2 1
A=5, B=4 : A2+B2=25+16=41 : 41 3 2 1
A=41, B=3 : A2+B2=1681+9=1690 : 1690 2 1
A=1690, B=2 : A2+B2=1681+4=2856104 : 2856104 1
A=2856104 , B=1 : A2+B2=1187163712+1=1187163713 : 1187163713
最後一個元素:1187163713
下面程式中使用的方案如下
在此方案中,我們將優先考慮佇列以按降序儲存陣列的元素。彈出兩個最大的元素,並將兩者的平方和再次推入該佇列。重複此操作,直到只剩下一個值。
獲取輸入變數 Number。
將結果的資料型別設定為長長整數 - lli
函式 reduceArray(int Num) 獲取輸入數字並返回使用上述操作計算的最大單個整數。
將優先佇列作為 pQueue。
使用 while 迴圈用數字 1 到 N 填充 pQueue。
當 i<=Num 時,將 i 推入 pQueue
現在 pQueue 以降序包含整數 1 到 N,大小為 N。
現在使用 while 迴圈遍歷 pQueue,直到其大小 >=1。
將最大值作為 var1=pQueue.top() 並彈出它。
將下一個最大值作為 var2=pQueue.top() 並彈出它。
將 var1 設定為其平方,將 var2 設定為其平方。
將 var1+var2 再次推入 pQueue。
在 while 迴圈結束時,返回頂部元素。
在 main 中列印結果。
示例
#include <bits/stdc++.h>
using namespace std;
#define lli long long int
int reduceArray(int Num){
priority_queue<lli> pQueue;
int i=1;
while(i<=Num){
pQueue.push(i);
i=i+1;
}
while (pQueue.size() > 1) {
lli var1 = pQueue.top();
pQueue.pop();
lli var2 = pQueue.top();
pQueue.pop();
var1=var1*var1;
var2=var2*var2;
pQueue.push(var1+var2);
}
return pQueue.top();
}
int main(){
int Number = 5;
cout<<"Single element after array reduction: "<<reduceArray(Number);
return 0;
}輸出
如果我們執行上述程式碼,它將生成以下輸出
Single element after array reduction: 1187163713
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP