C++ 程式碼,在不超出 k 的前提下計算複製操作次數
假設我們有一個包含 n 個元素的陣列 A 和另一個數字 k。有 n 堆糖果。第 i 堆有 A[i] 個糖果。我們可以在兩個索引 i 和 j (i != j) 上執行此操作,然後在 A[i] 中再新增 A[i] 個糖果(A[i] 不會減少)。我們可以執行此操作任意多次,但不幸的是,如果某一堆糖果嚴格超過 k 個,我們則無法再執行此操作。我們必須找出我們可以執行此操作的最多數次。
因此,如果輸入為 A = [1, 2, 3]; k = 5,則輸出將為 5,因為我們可以將 i = 0 視作 j = 1 三次,並視作 j = 2 兩次。因此,總共 5 次。
步驟
要解決此問題,我們將遵循以下步驟:
ans := 0 n := size of A sort the array A for initialize i := 1, when i < n, update (increase i by 1), do: ans := ans + (k - A[i]) return ans
示例
讓我們看看以下實現以加深理解:
#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A, int k){
int ans = 0;
int n = A.size();
sort(A.begin(), A.end());
for (int i = 1; i < n; i++){
ans += (k - A[i]) / A[0];
}
return ans;
}
int main(){
vector<int> A = { 1, 2, 3 };
int k = 5;
cout << solve(A, k) << endl;
}輸入
{ 1, 2, 3 }, 5輸出
5
廣告
Data Structure
Networking
RDBMS
Operating System
Java
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP