C++程式查詢移除最大值後的陣列
假設我們有一個包含n個元素的陣列A和另一個值k。我們想要執行k次以下操作。一個操作如下:
設d為陣列的最大值
對於從1到n的每個索引i,將A[i]替換為d - A[i]
我們需要找到最終序列。
問題類別
在資料結構中,陣列是特定型別元素的有限集合。陣列用於將相同型別的元素儲存在連續的記憶體位置中。陣列被分配一個特定的名稱,並在各種程式語言中透過該名稱進行引用。要訪問陣列的元素,需要索引。我們使用術語“name[i]”來訪問陣列“name”中位置“i”處的特定元素。各種資料結構,如堆疊、佇列、堆、優先佇列,都可以使用陣列實現。陣列上的操作包括插入、刪除、更新、遍歷、搜尋和排序操作。請訪問下面的連結以瞭解更多資訊。
https://tutorialspoint.tw/data_structures_algorithms/array_data_structure.htm
因此,如果我們問題的輸入類似於A = [5, -1, 4, 2, 0];k = 19,則輸出將為[0, 6, 1, 3, 5],因為d為5。
步驟
為了解決這個問題,我們將遵循以下步驟:
n := size of A m := -inf t := -inf for initialize i := 0, when i < n, update (increase i by 1), do: m := maximum of m and A[i] for initialize i := 0, when i < n, update (increase i by 1), do: A[i] := m - A[i] t := maximum of t and A[i] if k mod 2 is same as 1, then: for initialize i := 0, when i < n, update (increase i by 1), do: print A[i] Otherwise for initialize i := 0, when i < n, update (increase i by 1), do: A[i] := t - A[i] print A[i]
示例
讓我們看看以下實現以更好地理解:
#include <bits/stdc++.h> using namespace std; void solve(vector<int> A, int k){ int n = A.size(); int m = -999; int t = -999; for (int i = 0; i < n; i++) m = max(m, A[i]); for (int i = 0; i < n; i++) A[i] = m - A[i], t = max(t, A[i]); if (k % 2 == 1) for (int i = 0; i < n; i++) cout << A[i] << ", "; else for (int i = 0; i < n; i++) A[i] = t - A[i], cout << A[i] << ", "; } int main(){ vector<int> A = { 5, -1, 4, 2, 0 }; int k = 19; solve(A, k); }
輸入
{ 5, -1, 4, 2, 0 }, 19
輸出
0, 6, 1, 3, 5,
廣告